java—尝试理解基本wordcount mapreduce示例

sg2wtvxw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(367)

最近开始使用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,但我似乎找不到解释。
另外,我要澄清的是,术语是键和值对的归约形式的和(分别)是正确的吗?如果是这样的话,那么值仅仅是从map发出的每个术语的1的列表吗?这是我能理解的唯一方法,但这些只是假设。
对于noob的问题我深表歉意,我看过一些教程,但是很多时候我发现使用了很多令人困惑的术语,总体来说,基本的事情要比实际情况复杂得多,所以我很难理解这一点。
谢谢你的帮助!

yks3o0rb

yks3o0rb1#

以这个输入作为一个单词计数输入的例子。
制图员将把这个句子分成几个单词。

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

然后,reducer接收相同单词(或键)的“groups”和这样的分组值列表(并对键进行额外排序,但这对于本例并不重要)

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

如你所见,钥匙 input 已经“简化”为一个元素,您可以循环和求和这些值,并像这样发射

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

13z8s7eq2#

问得好。
如前所述,Map器输出一系列 (key, value) 对,在这种情况下的形式 (word, 1) 对于reducer接收的每个字,将其分组为 (key, <1,1,...,1>) ,汇总列表中的术语并返回 (key, sum) . 请注意,不是reducer进行分组;是MapReduce环境。
map-reduce编程模型与我们以前使用的模型不同,在这个模型中如何实现一个算法通常并不明显(例如,考虑一下如何实现k-means集群。)
我推荐leskovec等人编写的《海量数据集的免费挖掘》一书的第2章,也可以参考相应的幻灯片。

相关问题