我是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 ...
它没有组合键只对它进行排序,我的减速器作业不设置为零请帮助:(
答案 0 :(得分:1)
您需要更改:
Red(Text key, Iterable<IntWritable> values, Context context)
到
reduce(Text key, Iterable<IntWritable> values, Context context)
由于名称你实际上没有覆盖reduce方法,所以它将调用Reducer
类中的默认实现,它实际上只是写出每个键/值,这就是你似乎是看到。