2015-05-28 120 views
0

我想弄清楚MapReduce,到目前为止我想我已经获得了一个好的理解。为什么MapReduce在映射步骤中将每个值都映射为1?

但是,有一件事让我困惑。在MapReduce的每个示例和解释中,我都可以发现,映射步骤将所有值映射为1.例如,在最常见的示例中(计算字符串中单词的出现次数),映射部分将每个单词分割开来,然后将其映射到值1

的减少部分然后组合/降低等词语,加起来的倍量它们发生,使得它们映射至N而不是1(N是多少次出现的字)。

我不明白的是:为什么还打扰他们映射到1首先?看起来他们总是会映射到1.为什么不把它们分开,然后在Reduce步骤中,在那里进行映射,并同时将所有内容相加?

我敢肯定,我一定有一个很好的理由,我无法想象。谢谢!

(这个问题是关于MapReduce的作为一般的,不一定对Hadoop的或任何其他特定的技术或实现概念)

回答

0

映射器的输出是基于你想有使用的情况下决定的。在字数统计中,我们希望映射器分离单个单词并输出每个单词的出现次数。映射器针对输入中的每个键值对(输入拆分)进行调用。这里是它的每一行。键是偏移量,值是整个句子。在调用reducer之前会执行分组。所以所有的单词都被分组,每次出现(1次)被计数。发射1作为映射器输出并不是一个硬性规则。如果您已经注意到Hadoop中的数据集示例:权威指南,它们将年份和温度作为映射器输出发出。用例将根据年份进行分组并找出最高/最低温度。为了基本的理解,你可以把它看作组参数。快乐学习

相关问题