我是Hadoop的新秀,因此需要您提供帮助。我的Mapper输出是:性别年龄
目标:我也想计算男性的平均年龄和女性的平均年龄。这个想法似乎很简单,但是我得到了错误的输出。请看看我的 reducer 代码。
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);
}
}
}
reducer 输出:
它不是仅组合键就对其进行排序,并且我的reducer作业未设置为零,请帮助:(
最佳答案
您需要更改:Red(Text key, Iterable<IntWritable> values, Context context)
至reduce(Text key, Iterable<IntWritable> values, Context context)
由于名称的原因,您实际上并没有覆盖reduce方法,因此它将在Reducer
类中调用默认实现,该类实际上只是写出您似乎在看的每个键/值。
关于java - 合并和改组排序时面临的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40256481/