试图理解一个基本的WordCount MapReduce示例



最近开始使用Hadoop,并努力理解一些事情。下面是我正在看的一个基本的WordCount示例(计算每个单词出现的次数):

Map(String docid, String text):
 for each word term in text:
 Emit(term, 1);
Reduce(String term, Iterator<Int> values):
 int sum = 0;
 for each v in values:
 sum += v;
 Emit(term, sum);

首先,Emit(w,1)应该做什么?我注意到,在我看到的所有例子中,第二个参数总是设置为1,但我似乎找不到对此的解释。

此外,我只是想澄清一下,我说术语是键,而Reduce形式中的(分别)是键值对,这正确吗?如果是这种情况,是否只是Map发出的每个的1列表?这是我唯一能理解的方法,但这些只是假设。

很抱歉,我看过教程,但很多时候我发现使用了很多令人困惑的术语,总体上基本的事情比实际情况更复杂,所以我有点难以理解。

感谢您的帮助!

将此输入作为字数输入的示例。

Mapper会把这个句子分成单词。

Take,1
this,1
input,1
as,1
an,1
example,1
word,1
count,1
input,1

然后,reducer接收相同单词的"组"(或)和类似的分组值列表(并对键进行额外排序,但这对本例来说并不重要)

Take, (1)
this, (1)
input (1, 1)
etc...

正如你所看到的,密钥input已经"简化"为一个元素,你可以循环并求和这些值,然后像一样发出

Take,1
this,1
input,2 
etc...

好问题。

如所解释的,映射器输出(key, value)对的序列,在这种情况下,形式为每个单词的(word, 1),缩减器接收分组为(key, <1,1,...,1>),对列表中的项求和并返回(key, sum)。请注意,进行分组的是而不是减速器;这是地图还原环境。

map reduce编程模型与我们习惯使用的模型不同,并且通常不清楚如何在该模型中实现算法。(例如,想想如何实现k均值聚类。)

我推荐Leskovec等人免费提供的《海量数据集挖掘》一书的第2章。另请参阅相应的幻灯片。

相关内容

  • 没有找到相关文章

最新更新