【发布时间】:2017-07-21 23:32:33
【问题描述】:
我需要编写一个将输入作为两个输入文件的 map reduce。 第一个输入文件如下所示:
key1 , 25
key1 , 35
key1 , 60
key2 , 30
key3 , 45
key3 , 65
第二个输入文件如下:
key1, -10
key2, -20
key3, -15
我需要得到一个输出:
key1 , 15
key1 , 25
key1 , 50
key2 , 10
key3 , 30
key3 , 50
(输出是第一个输入文件的值减去第二个输入文件的值)
如何做到这一点? mapper 和 reducer 任务会是什么样子?
我的做法如下:
我想我必须有两个映射器,每个输入文件一个(可以使用一个映射器来读取两个文件吗?)。映射器将简单地发出键和值。
在 reducer 端,当我收到与某个键对应的所有值时,我必须将来自第一个文件的值减去第二个文件中的值。
所以我需要找出对应的值是来自第二个输入文件还是第一个文件。这是怎么做到的?
还有其他更好的方法吗?
【问题讨论】:
-
一个map,如果key不存在就创建map entry,否则从已有的map entry中加减key值
标签: java hadoop mapreduce hadoop-partitioning