【发布时间】:2017-06-14 22:18:50
【问题描述】:
我将Java、Hadoop 用于MapReduce。
输入(txt 文件):
doc1 apple pizza apple
doc2 pear apple
doc3 cookie noodle apple
doc4 pizza milk
.
.
.
Mapper 读取上述文本文件的每一行并发出 (word, 1) 。但是由于Reducer 应该知道每个单词在整个文档中出现了多少。例如,对于“apple”,它出现在 doc1、doc2、doc3 中,因此在 Reducer 中需要 '3'。
我的想法是这样的:
由于Reducer 在Mapper 的所有工作完成后开始运行,所以Mapper 可以计数每次发出HashMap 时增加HashMap 的值(word, 1)。例如,当Mapper 读取doc1 行时,它将整个内容作为唯一的单词(=> 苹果披萨)。并且每次它发出(word, 1),比如说(apple, 1),做hashMap['apple'] ++。
在完成所有Mapper 的工作后,Reducer 访问此HashMap,以便它可以使用每个单词在整个文档中出现的次数。
我已经阅读了How to share a variable in Mapper and Reducer class?,但我想从你们那里得到建议。
p.s 抱歉英语不好,但我不是本地人。如果您看不懂我在说什么,请发表评论。
【问题讨论】: