面对合并在Shuffle& amp; Mapreduce的排序

时间:2016-10-26 07:44:29

标签: java hadoop mapreduce

我是Hadoop的新手,因此需要您对一段代码的帮助。我的Mapper输出是:性别年龄

  

男38   女23   女性26 ... 100行像这样

目标:我想计算男性的平均年龄和女性的平均年龄。这个想法似乎很简单,但我得到了错误的输出。请看一下我的减速机代码。

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 个答案:

答案 0 :(得分:1)

您需要更改:

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

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

由于名称你实际上没有覆盖reduce方法,所以它将调用Reducer类中的默认实现,它实际上只是写出每个键/值,这就是你似乎是看到。