我有链接很多 Mappers 和 Reducers 的工具,在某些时候我需要合并以前的 map-reduce 步骤的结果,例如作为输入,我有两个包含数据的文件:
/input/a.txt
apple,10
orange,20
*/input/b.txt*
apple;5
orange;40
结果应该是 c.txt,其中c.value = a.value * b.value
/output/c.txt
apple,50 // 10 * 5
orange,800 // 40 * 20
怎么可能做到?我通过引入简单的 Key => MyMapWritable (type=1,2, value) 并在 reducer 中合并(实际上是相乘)数据解决了这个问题。它有效,但是:
- 感觉可以做得更容易(闻起来不好)
- 是否有可能在 Mapper 内部知道哪个文件被用作记录提供者(a.txt 或 b.txt)。现在,我只使用了不同的分隔符:逗号和分号 :(