在shuffle和mapreduce中合并时面临的java问题

zbdgwd5y  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(390)

我是hadoop的新手,因此需要你在一段代码上的帮助。我的Map输出是:性别年龄
男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。。。
它不是组合键,只是对其进行排序,并且我的减速机作业未设置为零请帮助:(

ndasle7k

ndasle7k1#

您需要更改: Red(Text key, Iterable<IntWritable> values, Context context)reduce(Text key, Iterable<IntWritable> values, Context context) 由于您没有实际重写reduce方法的名称,因此它将在 Reducer 有效的类只是写出每个键/值,这些键/值就是您所看到的。

相关问题