【问题标题】:Facing issue with Merging in Shuffle & Sort of Mapreduce面临合并随机播放和 Mapreduce 排序的问题
【发布时间】:2016-10-26 16:20:03
【问题描述】:

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

它没有组合键只排序它,我的减速器工作没有设置为零请帮助:(

【问题讨论】:

    标签: java hadoop mapreduce


    【解决方案1】:

    你需要改变:

    Red(Text key, Iterable&lt;IntWritable&gt; values, Context context)

    reduce(Text key, Iterable&lt;IntWritable&gt; values, Context context)

    由于名称实际上并没有覆盖 reduce 方法,因此它将调用 Reducer 类中的默认实现,这实际上只是写出您似乎看到的每个键/值。

    【讨论】:

    • 感谢一大堆人@Binary stackoverflow.com/users/256376/binary-nerd,也感谢您通常不会对我的问题投反对票,因为我的问题评分通常是负面的:D
    • 没问题,希望对您有所帮助。如果这解决了您的问题,请接受/支持。
    • 此外,您可以通过将@Override 注释添加到您重载的任何方法中来避免此类问题 - stackoverflow.com/questions/7160479/override-annotation
    • 是的,这是一个好主意,通常使用 Java 编译器会这样做,所以在 hadoop 中必须小心,我已经支持你的答案,但它不会显示我的投票,因为我的徽章较少,但肯定是将被记录。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2019-04-14
    • 2023-01-23
    相关资源
    最近更新 更多