これはScala Advent Calendar 2015, Embulk Advent Calendar 2015, Couchbase Advent Calendar 2015の14日目の記事です。
昨日はOE_uiaさんの「Scala標準のPromiseがAndroidで便利だという話」(Scala),
daichikeさんの「N1QLがJSONデータモデルの柔軟さを引き出す」(Couchbase)でした。

Couchbaseへの書き込みを行うEmbulkのOutputプラグインをScalaで書いてみたのでその紹介と手探り感を記事にした。
EmbulkプラグインはJavaまたはRubyで書くことができるが、すでにJavaプラグインをScalaで書く試みをされている方はいるようで、
embulkのpluginをScalaで作ってみようと思った時の備忘録や、
実際にScalaで書かれているembulk-output-aerospikeなどを参考にさせていただいた。

GitHubリポジトリ

MessagePack の Java 版を Scala から使ってみた。
なんでこんなことをしたかというと
MessagePack for Scala は現状 Scala 2.10 には対応していないらしく
(java.lang.NoClassDefFoundError: scala/reflect/ClassManifestエラーが発生する)、
2.10 対応版フォークを使用する、
自分で公式リポジトリから clone してワークアラウンドコードを入れてみる、
など対応方法はあると思うけど、
MessagePack for Java を使ってみるとどんな感じになるかを試してみた。
今回は JSON ⇔ MessagePack の変換。
本エントリは Scala で ATND API を叩くScala で partition 関数を使用してリストの要素を振り分けるの続きです。

さて、ここまでくるともうひとつの ListBuffer 使用箇所も不変リストにしたい。したほうがいいはずだ、多分。
残った ListBuffer 使用箇所は、「"keyword=aaa,bbb", "ym=201207", "ymd=20120723"」といった要素を持つリストを用意して
mkString("&") で「"keyword=aaa,bbb&ym=201207&ymd=20120723"」といった文字列を作っている。
(話はそれるけど、要素の区切り文字や接頭辞・接尾辞をつけた文字列を作れる mkString って便利)
前回のエントリで、複数の引数を受け取って、数値6個ならymパラメータ、数値8個ならymdパラメータ、
それ以外ならkeywordパラメータとして検索条件に指定するために
可変リストをあらかじめ3つ用意してパターンマッチで各要素をそれぞれのリストに追加していくようにしていたが、
partition という関数(TraversableLike トレイトのメソッドというのが正しいのかな?)を使うと
上手く振り分けられそうだったのでやってみた。
Scala 勉強中なのでXML操作やパターンマッチングなどをATND APIを使って試してみた。

キーワード・イベント開催年月・イベント開催年月日を検索条件にすることができるようにして、
返ってきたXMLからタイトル、開始日時、開催場所を標準出力するようにしてみた。
引数を複数渡して、yyyyMM形式ならymパラメータに、yyyyMMdd形式ならymdパラメータに、
どちらにもマッチしないならkeywordパラメータに渡すことにした。
(数値が6個か、8個かでパターンマッチングしているので厳密には正しい日付かどうかチェックできていないけど)

Copyright© 2011-2021 Shunsuke Otani All Right Reserved .