S-JIS[2013-11-09/2016-02-11] 変更履歴

Asakusa Framework 複製演算子

Asakusa FrameworkOperator DSLの複製演算子のメモ。


概要

複製演算子は、1つのレコードを(同じ内容を)複数ポートに出力する演算子。
性能特性はExtract(旧ドキュメントではMap)。[/2016-02-11]

入力
ポート数
入力データモデル
の制約
イメージ 出力
ポート数
出力データモデル
の制約
入力1レコード
に対する
出力レコード数
1   任意 inと同じ
データモデル
1レコード。
(どのポートも
1レコードずつ
出力される)

ただし、1つのポートから出たデータをそのまま他の複数の(別々の)演算子の入力ポートに接続することが出来るので、
実は複製演算子には専用の記述方法は存在しない。(専用のメソッドは用意されていない)
したがって、図としては以下の方が実態に近い。


演算子の出力を3つの演算子に(複製して)接続する例。
(この図はToad Editorを用いて作っています)

example.dmdl(DMDL):

hoge = {
    〜
};

ExampleJob.java(Flow DSL):

import com.example.modelgen.dmdl.model.Hoge;

import com.example.operator.ExampleOperatorFactory;
import com.example.operator.ExampleOperatorFactory.Update1;
import com.example.operator.ExampleOperatorFactory.Update2;
import com.example.operator.ExampleOperatorFactory.Update3;
import com.example.operator.ExampleOperatorFactory.Update4;
	private final In<Hoge> in;

	private final Out<Hoge> out1;
	private final Out<Hoge> out2;
	private final Out<Hoge> out3;
	@Override
	public void describe() {
		ExampleOperatorFactory operators = new ExampleOperatorFactory();

		Update1 update1 = operators.update1(this.in);

		Update2 update2 = operators.update2(update1.out);
		Update3 update3 = operators.update3(update1.out);
		Update4 update4 = operators.update4(update1.out);

		this.out1.add(update2.out);
		this.out2.add(update3.out);
		this.out3.add(update4.out);
	}

この例では、更新演算子の出力「update1.out」を3箇所で入力として使っている。これが「複製されている」という位置づけ。


Operator DSLへ戻る / AsakusaFW目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま