My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
ProgrammingGuideMergeMapper  
SSS Mapreduce Programming Guide - MergeMapper
ja, en
Updated Feb 27, 2013

MergeMapper

SSS Mapreduceには2つのTupleGroupのすべての組み合わせについて処理を行う機能があります。 この機能を「MergeMapper」と呼びます。

MergeMapperではまず処理用のMapperとして入力を2つ持つものを作成します。

public class MergeMapper extends Mapper {
 public void map(Context context,
                 PackableString key1, PackableInt value1,
                 PackableString key2, PackableInt value2,
                 Output<PackableString, PackableInt> output) {
   // 処理内容…
 }
}

次にJobEngineでジョブの実行指示を出す際に、addInputを2回呼び出し入力を2つ指定します。

    JobEngine engine = new JobEngine(client);
    try {
      GroupID input1 = ...;
      GroupID input2 = ...;
      GroupID output = GroupID.createRandom(engine);

      engine.getJobBuilder("MergeMapper", MergeMapper.class)
        .addInput(input1)
        .addInput(input2)
        .addOutput(output).build();

このとき一点注意が必要なのは、2つ目の入力のTupleGroupはブロードキャストフラグが有効なものである必要がある点です。 ブロードキャストフラグが有効なTupleGroupはGroupID.createRandomでGroupIDを生成する際に、以下のようにbroadcast引数にtrueを指定することで作成できます。

    GroupID gid = GroupID.createRandom(client, true);
    DataPutter<PackableInt, PackableString> putter =
      DataPutter.create(client, PackableInt.class, PackableString.class, gid); 
    // DataPutter.createの第四引数にはデータを書き込む!TupleGroupのGroupIDを指定することが可能である。
      :
      :

また、MergeMapperでは2つ目の入力のTupleGroupをメモリ上にすべて読み込むため、このTupleGroupのサイズがメモリに乗らない場合には処理を行うことができません。

Powered by Google Project Hosting