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

Posted

技术标签:

【中文标题】试图理解一个基本的 WordCount MapReduce 示例【英文标题】:Trying to make sense of a basic WordCount MapReduce example 【发布时间】:2016-03-29 16:07:54 【问题描述】:

最近开始使用 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,但我似乎找不到关于它的解释。

另外,为了澄清一下 - 我是否正确地说 term 是键,而 sum 在 Reduce 中形成键值对(分别)?如果是这种情况,values 是否只是从 Map 发出的每个 term 的 1 列表?这是我能理解它的唯一方法,但这些只是假设。

对于这个菜鸟问题,我深表歉意,我看过教程,但很多时候我发现使用了很多令人困惑的术语,而且总体上的基本内容比实际情况更复杂,所以我正在苦苦挣扎有点难以理解。

感谢任何帮助!

【问题讨论】:

【参考方案1】:

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

Mapper 会将这个句子拆分成单词。

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

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

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

如您所见,键 input 已被“简化”为单个元素,您可以循环遍历并对值求和并像这样发出

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

【讨论】:

【参考方案2】:

好问题。

如上所述,映射器输出(key, value) 对的序列,在这种情况下,每个单词的形式为(word, 1),reducer 接收分组为(key, &lt;1,1,...,1&gt;),总结列表中的术语并返回@ 987654328@。请注意,进行分组的是 而不是 reducer;这是 map-reduce 环境。

map-reduce programming model 与我们习惯使用的不同,在此模型中如何实现算法通常并不明显。 (例如,想想如何实现 k-means 聚类。)

我推荐 Leskovec 等人免费提供的 Mining of Massive Data Sets book 的第 2 章。另见the corresponding slides。

【讨论】:

感谢您的解释和资源 - 我会给那些书/幻灯片看看。

以上是关于试图理解一个基本的 WordCount MapReduce 示例的主要内容,如果未能解决你的问题,请参考以下文章

PySpark理解wordcount.py

WordCount的程序设计没写出来怎么办

试图理解/确定一个基本的 Git 工作流程

大数据wordcount代码。要理解代码就要配合图形理解

WordCount基本功能

软件工程:java实现wordcount基本功能