我试图弄清楚MapReduce,到目前为止,我觉得我的理解还不错。
然而,有一件事让我感到困惑。在我可以找到的MapReduce的每个示例和解释中,映射步骤将所有值映射到1.例如,在最常见的示例中(计算字符串中单词的出现次数),Map部分将每个单词拆分,然后将其映射到值1。
然后,“缩小”部分组合/缩小相似的单词,将它们出现的次数加起来,使它们映射到N而不是1(N是单词出现的次数)。
我不明白的是:为什么在第一时间将它们映射到1呢?看起来他们总是会映射到1.为什么不将它们分开,然后在Reduce步骤中,在那里进行映射,同时对所有内容进行求和?
我确信必须有一个我无法想到的充分理由。谢谢!
(这个问题是关于MapReduce作为一般概念,不一定是关于Hadoop或任何其他特定技术或实现)
答案 0 :(得分:0)
映射器的输出是根据您想要的用例决定的。在字数统计中,我们希望映射器将各个单词分开并输出每个单词的出现次数。为输入中的每个键值对(输入拆分)调用映射器。这里是每一行。键是偏移量,值是整个句子。在调用reducer之前会执行分组。所以所有的单词都被分组,每次出现(这里都是1)都要计算在内。发射1作为映射器输出并不是一个很难的规则。如果您已经注意到Hadoop:Definitive指南中的数据集示例,则它们将年份和温度作为映射器输出发出。用例是根据年份进行分组,找出最高/最低温度。出于基本的理解,您可以将其视为组参数。快乐学习