面临在Shuffle和Sortof 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…

它不是组合键,只是对其进行排序,并且我的reducer作业没有设置为零,请帮助:(

您需要更改:

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

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

由于名称的原因,您实际上并没有覆盖reduce方法,因此它将调用Reducer类中的默认实现,该类实际上只是写出您所看到的每个键/值。

相关内容

  • 没有找到相关文章

最新更新