1

以下のような形式のファイルがあります。

1,5321234567
1,5324564321
1,5324564321
2,1234567643
2,1234567666
2,9875422345
3,5344435555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 で
_
_
_
_

削減プロセスの最後に、最初のフィールドがキーである 2 番目のフィールドの個別のカウントが必要です。例えば

1,2
2,3
3,3

この目的のための Java の最も単純な map および reduce 関数は何ですか?

Tnx。

4

3 に答える 3

0

私があなたの目標を正しく理解している場合は、次のことを行う必要があります。

  1. キーごとの値を一意にする
  2. 「キー」ごとに個別のアイテムの数を数える

したがって、そこに到達する最も簡単な方法は次のようになります。

入力が{A,B}であると仮定します

MAP 1:
   Output Key  : {A,B}
   Output Value: 1
REDUCE 1:
   Input Key   : {A,B}
   Input Values: {1,1,1,...}
   Output Key  : A
   Output Value: B

MAP 2:
   Output Key  : A
   Output Value: 1
REDUCE 2:
   Input Key   : A
   Input Values: {1,1,1,...}
   Output Key  : A
   Output Value: SUM of all the values
于 2013-01-30T08:38:13.393 に答える
-1

私が理解しているように、値を保持するのではなく、キーの一意の値の数が必要です。レコードからキーを作成することで簡単になりますが、残りの Hadoop フレームワークは一意のレコードを並べ替えます。

    map (IntWritable key, Text value, Context context) {

       context.write(value, new IntWritable(1)); 
    }

    reduce (Text key, Iterable<IntWritable> values, Context context) {

         long count = 0;
         for (Iterator<IntWritable> iterator = values.iterator(); iterator.hasNext();) {
              count+= iterator.next().get();
         }

         context.write(key, new LongWritable(count));
      }

レデューサーはコンバイナーとしても使用できます。

于 2013-01-31T14:12:45.530 に答える
-2

並べ替えを行うだけです。arraylist 内のすべての入力を取得し、並べ替えを行います。

これはあなたを助けるでしょう

配列

于 2013-01-29T12:35:51.510 に答える