2016年12月21日

Scala SparkでRowがMatchErrorを起こす

こんな感じ。

Exception in thread "main" scala.MatchError: [foo,28,995,0.0] (of class org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema)
続きを読む

2016年08月18日

scala.util.Tryで複数の例外をcatchする方法がわからなかった

Scalaのtry catchで複数の例外をまとめてcatchしたい場合は、こんな風に書ける。続きを読む

2014年07月18日

ScalaのAwaitで処理をTimeoutさせる

CssBoxでWebページを収集している時に途中で詰まって動かなくなることがけっこうあったので、Awaitで指定時間以内に結果が戻ってこなければ諦める処理を書く。

こういうの簡単に書けるっていいよね。

import scala.concurrent._
import scala.concurrent.duration.DurationInt
import scala.concurrent.ExecutionContext.Implicits.global
import java.util.concurrent.TimeoutException

val f = future {
  // ここでHTTP通信の処理
}
f onSuccess {
  case content => // ここで取得した値をごにょごにょ
}

try Await.result(f, 10 seconds)
catch { case e: TimeoutException => e.printStackTrace() }

2014年01月13日

Slickをちょこちょこ使う

最近、Slickをちょこちょこ使っている。Typesafeのお墨付きもあるし、ScalaからDBを使おうと考えると、これを選択するのが一般的になるのだろう。

今週末はどの記述がどういうクエリを投げているのか確かめたりしてみた。

ScalaのORM「Slick」でいろんなSQLを投げてみる
http://www.mwsoft.jp/programming/scala/slick_query.html

続きを読む

2014年01月11日

Slickのelementsメソッドがfetchすることを確認する

Slickで取ったSQLの結果はたいていlistかfirstOptionで取っていたのだけど、大きめの結果を取る場合はfetchした方が良いよなという事で、elementsを使ってみる。

確認のため、1000万件の結果を取得させてみて、listと比べてメモリ消費量が少ないことを確認する。 続きを読む

2014年01月02日

LuceneとWikipediaのデータを使ったクラスタリング

年末にこんなのを書く。

1日で作れるWikipediaとLuceneを使った簡易な文書カテゴリ判定機能
http://www.mwsoft.jp/programming/nlp/wikipedia_categorizer.html

Wikipediaのカテゴリと類似文書検索を使った簡単なものだけど、下手なクラスタリングよりは精度が出る。

Luceneを使ったカテゴリ分類というのはけっこうあって、たとえばCarrot2のようなLuceneのインデックスからクラスタリングを実行するソフトがあったり、Mahoutのクラスタリングの素材として利用している例もけっこう見られる。

TF/IDFで単語ごとの重みを出せるとか、出現頻度の低いTermを削れるとか、英単語の活用が揃えられるとか、動詞の基本形を揃えられるとか(あ、今回のコードではやってないや。後でやろう)、カタカナの長音の有無を揃えられるとか(これもやってないな)、Luceneは日本語のNLPツールとして非常に優秀だと思う。

2013年12月08日

SlickでH2に対して発行したクエリを確認する

TRACE_LEVEL_SYSTEM_OUT=2 を設定すると、標準出力に発効されたクエリの情報とかが出るらしい。下記のような感じ。
Database.forURL(
"jdbc:h2:data/dbname;TRACE_LEVEL_SYSTEM_OUT=2",
driver = "org.h2.Driver")


続きを読む

2012年03月14日

HadoopのContextをScalaのforで回してみたメモ

HadoopのContextは、「nextKeyValue」「getCurrentKey」「getCurrentValue」の3つを持っていてループで回して使ったりする。

この子をScalaのforでこんな風に回してみたかった。
for ((key, value) <- context) {
// ここで処理
}

続きを読む

2011年12月12日

Java使いをScalaに引き込むサンプル集

なんか気まぐれでこんなの書いた。

Java使いをScalaに引き込むサンプル集(その2)
http://www.mwsoft.jp/programming/scala/java_to_scala2.html

こういうのは書いた後にいろいろ後悔することが多いんだけど、まぁいいや。

2011年12月01日

ScalaでMapReduceの面倒な記述を省略しようとしたメモ

ScalaでMapReduceする際の記述は、以下のサイトがとても参考になった。

ScalaでHadoopのWordCount
http://www.ne.jp/asahi/hishidama/home/tech/scala/sample/hadoop.html

上記のサイトでも登場するけど、ScalaHadoopというMapReduce時の記述を楽にしてくれるライブラリがいるらしい。面倒な記述が自動化されている上にChainで処理が書けてしまうなかなか面白いライブラリ。

個人的にはそこまでやらずに、面倒なところを共通化してくれたらあとは基本機能がむき出しになっている方が好きなので、ScalaHadoopを参考に自分に必要な処理だけ共通化する形を考えてみた。

続きを読む

2011年09月18日

メモ書き

こんなのを書く。

scala.sys.processを使ってみる
http://www.mwsoft.jp/programming/scala/scala_process.html

上のを書いていてふと思いついたので、試しにTwitterのStreamingAPIの内容をcurlでさらっと取ってファイルに書いてみる。

ScalaのデフォルトのJSON機能(微妙な子)を使ってしまっていたり、日本語判定が恐ろしいほどに適当だったりするけど、普通はTwitter4jとか言語判定ライブラリを使うだろってとこなので、適当なままで良しとする。

続きを読む

2011年08月03日

SolrのEmbeddedSolrServerからIndexSearcherを使ってみる

Solrの勉強がてらにEmbeddedSolrServerから直接IndexSearcherを奪って処理をさせてみた。コードはScala。

こんな使い方をして良いのかと聞かれると、どう見ても良くはない。こんな方向性の勉強で良いのかと言われると、これまたどう考えても良くはない。でも、楽しかったから良しとする。

続きを読む

IntelliJ IDEAのJava→Scalaコード自動変換を試す

IntelliJ IDEAにはJavaのコードをScalaのコードに自動で変換する機能が付いている。

プロジェクトの中にJavaのクラスを作って、Refactor→Convert Java File To Scalaで変換ができる。また、プロジェクト中のJavaのコードの一部をコピってScalaのコードの中にペーストすると、Scalaのコードに自動変換した上で貼り付けてくれたりもする。

これをScala入門者が困った時用の機能として勧めて良いものか確認したかったので、軽く調査してみる。結論として、それなりに救ってくれそう。

以下、IntelliJ IDEAにJava→Scala変換してもらった結果。

続きを読む

2011年08月01日

ScalaとJavaの相違点の箇条書き

この手の原稿を書くことになった気がするので(気のせいかもしれない)、いろいろまとめ中。

続きを読む

2011年07月13日

ScalaのSynchronizedQueueを使ったメモ

所用でscala.collection.mutable.SynchronizedQueueを使ったので、メモ。

SynchronizedQueueは名前の通り、enqueue(追加)やdequeue(取り出し)する時の処理をsynchronizedにやってくれるQueueクラス。

処理的にはQueueを継承して各処理でsynchronized{ super.処理 }してるだけ。

ScalaにはQueue以外にも、Stack、Set、Buffer、MapなんかのSynchronized版が存在する。

続きを読む

2011年07月02日

H2 Databaseを組込みモードで使ってみたメモ

H2とはあだ・・・いや、なんでもない。組み込みとしてもサーバとしても使えるJava製データベース。

組み込みで使うSQLというとSQLiteがメジャーだけど、JavaやScalaのプログラムに組み込む場合はH2を見かけることもけっこうある。

速度面もそれなりに良い感じだったり、同時アクセスに対してもそれなりに対処できるようなので、ちょっとしたDB操作を伴うScalaのアプリを作ろうとした際に利用できそうに見える。

続きを読む

2011年06月30日

ScalaとCommonsIOでむにゃむにゃしたメモ

私はCommonsがないと生きていけないダメな人間なので、ScalaでCommonsIOをもっと簡単に使えるようにできないものかと思って、下記のようなことをやってみた。

implicit conversionsでjava.io.FileにCommonsIOの機能をドカドカ入れてみたメモ
http://www.mwsoft.jp/programming/scala/commonsfile.html

続きを読む

2011年06月19日

ScalaでWebスクレイピングしようとしたメモ

勉強がてらにうだうだしてみた。
http://www.mwsoft.jp/programming/scala/web_scraping.html

感想
  • NodeSeqとかXMLLoaderのソースをひと通り読んだけど、えらくシンプルだった
  • XPathが使いたくて仕方ない気持ちになったけど、良い解決方法が思いつかなかった
  • 良いライブラリを見かけるまでは、オレオレ実装で頑張ろうと思った

2011年06月13日

lift-mapperをmainから使ってみたメモ

設定が足りているか微妙だけど、割と簡単にmapperの部分だけを使うことができた。さらっとSQLを使いたい時の選択肢としては悪くないような気もした。

続きを読む

2011年06月11日

Jettyで302リダイレクトをするコードを書く

昨日はJettyを静的コンテンツを読むだけのシンプルな設定で立ち上げて、テスト用のHTTPサーバとして使ってみた。

今日はその続き。HTTPのテストをする際に出てくるのが、リダイレクト関連。5回までリダイレクトしてそれ以上になったら止まれみたいなコードをテストする際に、さらっとテストしやすいリダイレクト設定が書けるとありがたい。

続きを読む

JettyをScalaから起動してHTTP関連のテストで使ってみる

・前書き

HTTP通信関連のテストをする時に、あまり他所様に連続リクエストをするのは好ましくない。なのでlocalhostにテストファイルを置いてテストケースを実行することがある。

これまではApacheのhtdocsに放り込んでやってたのだけど、環境が変わるたびにlocalhostにファイルを用意する作業が必要になってしまうのがイマイチ。

続きを読む

2011年05月22日

ScalaのStringLike.formatで日付フォーマット

お決まりのyyyymmddに変換する的なコードを書く時に、何を使ってやろうかなぁと少し迷った。

普通にDateFormatでやっても良いのだけど、StringLikeのformatを使った方が短くて良い気もした。ちとフォーマット文字列が読みづらいのと、パースする方では使えないのがアレだけど。

続きを読む

2011年05月18日

Scala2.9で追加になった文字列関連の関数

StringLikeとStringOpsを見た限りでは、関数の揃い自体は大して変わってなかった。コードはけっこう変わってるように見えるけど。

上記2クラスにおいて、2.9で追加になった関数は「replaceAllLiterally」と「seq」の2つだけっぽい。ざっと見ただけだから見落としはあるかも。あとCollections系の継承してるクラスで追加になったものは省く。

続きを読む

2011年05月14日

なぜScalaなのですか

Odersky先生が書いた、Why Scala?という文章を読む。
http://blog.typesafe.com/why-scala

要訳するとこんな感じだろうか。ちと意訳し過ぎた感があるので注意。

尚、本文ではOdersky先生を甲とする。なんとなくそういう気分だったから。

続きを読む

2011年05月12日

Validator.nu HTML Parserを使ってみる

Validator.nu HTML Parserは、Java製のHTMLパーサ。Firefox4のHTML5パーサはこれを元にしているらしい。Liftが依存しているライブラリの中を覗いていたらこの子がいたので、試しに使ってみた。

利用しているバージョンは1.2.1。Scala2.8で記述。

続きを読む

2011年05月05日

Scalaよもやまメモ

コップ本読んでる時にいろいろメモを残していたので、その中から面白みがありそうなものを貼ってみる。

続きを読む