Asakusa FrameworkのOperator DSLのチェックポイント演算子(checkpoint)のメモ。
|
チェックポイント演算子は、処理を区切る演算子。通常はこの演算子を使うことは無い。
性能特性はExtract(旧ドキュメントではMap)。[/2016-02-11]
入力 ポート数 |
入力データモデル の制約 |
イメージ | 出力 ポート数 |
出力データモデル の制約 |
入力1レコード に対する 出力レコード数 |
---|---|---|---|---|---|
1 |
![]() |
1 | inと同じ データモデル |
1レコード。 |
現在のAsakusaFWでは、Flow DSLで記述した各演算子はHadoopのMapReduceジョブに変換されて実行される。
このとき、複数の演算子を1つのMapReduceジョブ内にまとめて実行するような最適化が行われることがある。
ここでチェックポイント演算子を入れると、処理が区切られ、チェックポイント演算子の前後が別々のMapReduceジョブに分けられる。
(チェックポイント演算子のあるところでそれまでの結果がファイルに出力されるのだが、それはつまり、そこでMapReduceジョブが一旦終わることを意味する。ファイルへの出力とは、MapReduceジョブの出力なので)
チェックポイント演算子のコーディング例。
(この図はToad Editorを用いて作っています)
hoge = { 〜 };
import com.asakusafw.vocabulary.flow.util.CoreOperatorFactory; import com.asakusafw.vocabulary.flow.util.CoreOperatorFactory.Checkpoint; import com.example.modelgen.dmdl.model.Hoge;
private final In<Hoge> in; private final Out<Hoge> out;
@Override public void describe() { CoreOperatorFactory core = new CoreOperatorFactory(); // チェックポイント演算子 Checkpoint<Hoge> cp = core.checkpoint(this.in); this.out.add(cp.out); }
チェックポイント演算子はコア演算子なので、Operatorクラスにプログラマーが何かを実装する必要は無い。
なお、出力データの指定方法は、「out.add(cp)
」でも「out.add(cp.out)
」でも同じ。見た目が違うだけ。
チェックポイント演算子はコア演算子なので、(Operatorクラスにプログラマーが何も実装していないので)Operatorの単体テストを実装する必要は無い。