我是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/

10-12 23:01