|
ProgrammingGuideMergeReducer
SSS Mapreduce Programming Guide - MergeReducer
ja, en MergeReducerSSS Mapreduceでは2つのTupleGroupからキーの同じものをマージする処理を行う機能があります。 この機能を「MergeReducer」と呼びます。 MergeReducerではまず、入力を2つ持つReducerを作成します。 public class MergeReducer extends Reducer {
public void reduce(Context context,
PackableString key1, Iterable<PackableInt> values1,
PackableString key2, Iterable<PackableInt> values2,
Output<PackableString, PackableInt> output) {
// 処理内容…
}
}このときキーの型は同じでなければなりません。 SSS Mapreduceは2つTupleGroupの中でキーが同じものをまとめ、reduceメソッドを呼び出します。 ユーザはreduceメソッドの中で2つのTupleGroupの値をマージする処理を記述することができます。 このとき、2つキーのキーの値は同じになります。 どちらか片方は不要なのですが、SSS Mapreduceが引数の情報からReducerの入力/出力の型を取得する関係上必要となっています。 次に、Job.Builderでジョブを作成する際にaddInputを2回呼び出し、2つの入力を指定します。 JobEngine engine = new JobEngine(client);
try {
GroupID input1 = ...;
GroupID input2 = ...;
GroupID output = GroupID.createRandom(engine);
engine.getJobBuilder("MergeReducer", MergeReducer.class)
.addInput(input1)
.addInput(input2)
.addOutput(output).build();MergeReducerでは片方のTupleGroupにのみ存在するキーに対してはreduceメソッドを呼びだしません。 片方のTupleGroupにのみ存在するキーに対してもreduceメソッドを呼び出すようにするには、Configurationにて"marge_reducer.handle_one_side_only"をtrueに設定します。 Job.Builder jb = engine.getJobBuilder("MergeReducer", MergeReducer.class)
.addInput(input1)
.addInput(input2)
.addOutput(output);
jb.getConfiguration().setBoolean("marge_reducer.handle_one_side_only", true);
jb.build();
| |