首页 > 解决方案 > 在 MapReduce Iterable IntWritable 中对正数和负数求和

问题描述

我在 Java Hadoop 中使用 MapReduce 来计算传出边和传入边之间的差异。例如节点 2 有 2 条出边和 3 条入边,则差值为 -1。

src, tgt

1, 2
2 , 1
2 , 3
3, 2
4, 2
4, 3

所以输出应该是:节点2,差异:-1。

在 Mapper 函数中,如果 2 是源,我分配 IntWritable +1,如果 2 是目标,则分配 -1。

所以映射器在 Iterable IntWritable 之后生成这个并将其发送到 Reducer。

(node 2, values(-1, +1, +1, -1, -1)) 并且reducer返回(0, -1)而不是-1。

下面的输出:

1 0
2 0
2 -1
3 0
3 -1
4 2

我在不同的场景下尝试了几次,这就是我相信正在发生的事情。我不知道如何让减速器简单地添加所有数字并返回一个值?

标签: javahadoopmapreduce

解决方案


推荐阅读