2016-10-26 16 views
1

私はHadoopに新人ですので、コード上であなたの助けが必要です。私マッパー出力は次のとおりです。性別年齢Shuffle&Sort of Mapreduceでマージする際に直面する問題

男性38
女性23
女性26 ...この

目的のように100行:私は男性の平均年齢を計算したいと女性の平均年齢。アイデアはかなりシンプルなようですが、私は間違った出力を得ています。私のレデューサーコードplsを見てください。

public static class AgeRed extends Reducer<Text, IntWritable, Text, IntWritable> { 

    public void Red(Text key, Iterable<IntWritable> values, Context context) throws IOException , InterruptedException { 

      int sum=0, count=0; 
      for(IntWritable i : values){ 
       count++; 
       sum+=i.get(); 
      } 
      int a =sum/count; 
      IntWritable avg = new IntWritable(a); 
      context.write(key, avg); 
     } 
    } 
} 

減速出力:

女性23
女性26


男性38 ...これらすべての行が、それは女性23,26,28

のようなマージされていません。..
男性38,34,42 ...

ことではありませんキーを組み合わせるだけで、それをソートし、私の減速ジョブは、変更する必要があります:(

答えて

1

助けてください、ゼロに設定されていません。

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

あなたが実際にそれだけで効果的であるReducerクラスのデフォルトの実装を呼び出すことになるので、この方法を減らすオーバーライドされていないため、名前の

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

には、各キー/値を書き出していますあなたが見ているようです。

+0

ありがとうございました。@Binary http://stackoverflow.com/users/256376/binary-nerd、私の質問は通常、このような愚かな質問でdownvotingしてくれてありがとう、私の質問評価は負になります:D –

+0

問題はありませんそれが助けてくれることを願うこれがあなたをソートしたら、ただ/ upvoteを受け入れてください。 –

+0

また、オーバーロードしているメソッドに '@ Override'アノテーションを追加することで、この種の問題を避けることができます。http://stackoverflow.com/questions/7160479/override-annotation –

関連する問題