我是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
类中的默认实现,该类实际上只是写出您所看到的每个键/值。