Asakusa Framework Advent Calendar 2015の24日目です。
AsakusaFWの標準的な機能だけを使ったWordCountは以前から公開していますが、AsakusaFW0.7.5で@directio.lineがsandboxに導入されたことを機に、拡張機能を使ったWordCountを書いてみました。
@directio.lineを使ったテキストファイル読み込みの他、拙作の機能を使ってコーディングする手順を書いています。
最初にAsakusaFW版WordCountを書いた頃は、まずHadoopありきだった(Hadoopの勉強をしてからHadoopを使うアプリを勉強し始めた)ので、Hadoopの基本であるWordCountを色々なアプリで書くということをやっていました。今となっては素のMapReduceでコーディングすることはないと思う(やろうとしているのなら、他のフレームワーク(AsakusaFWとかw)の導入を考えるべきだと思います)ので、いつまでもWordCountでも無かろうと思わなくもないのですが、変換→集計という最小限のサンプルとしては今でも有用だと思います。
拡張機能使用版WordCountでは、@directio.lineによるテキストファイル読み込みの他に、拙作のテンプレート機能を使っています。
これは、テンプレートファイル(FreeMarker)を使ってDMDLからJavaソースを生成するものです。テンプレートファイルにJavaコードを書いておき、データモデル名やプロパティー名部分だけを置換してJavaソースを生成します。
実業務では、入出力ファイルが増えてくると似たようなImporter/Exporterが増えてきます。データモデル名部分だけが違うファイルをいちいち作るのが面倒だったので、このようなテンプレート機能を作ってみました。(と言いつつ、実業務ではまだ導入していないのですが^^;)
テンプレート機能としては生成できるのはJavaソースに限らないのですが、AsakusaFWのDMDLのSPI機能では、基本的にファイルの出力先がJavaソース用ディレクトリーしか指定できない為、今はJavaソースだけを対象としています。
また、拙作のOperatorのテストツールの使用例も書いています。
通常のOperatorの単体テストでは、AsakusaFWが生成するメソッド(Operator上のabstractメソッド)のテストは書きません。
大抵は集計キーやグルーピングキーに関するメソッドになるので、テストしたければ、フローのテストで行います。が、それでは他の演算子との組み合わせのテストになってしまいますし、メソッドひとつのテストだけの為にFlowPartを作るのもどうかと思います。
という訳で、拙作のテストツールでは、Operatorのabstractメソッドのテストも行うことが出来ます。
擬似的な集計/グルーピングを行うので、通常の単体テスト(メソッドを1回だけ呼び出せばいい)よりも、入力データや出力結果の検証量が増えてしまいますが。
さらに、拡張機能使用版WordCountのページでは、フロークラスやバッチクラスの生成等に拙作DMDL EditorXの機能を使う方法を書いています。
これらの機能は、来年のアドベントカレンダー辺りで紹介したいと思います(爆)
※コメント投稿者のブログIDはブログ作成者のみに通知されます