【问题标题】:Why does MapReduce bother mapping every value to 1 in the map step?为什么 MapReduce 会在 map 步骤中将每个值都映射到 1?
【发布时间】:2015-05-28 17:44:37
【问题描述】:

我正在尝试弄清楚 MapReduce,到目前为止,我认为我的理解还不错。

但是,有一件事让我感到困惑。在我能找到的 MapReduce 的每个示例和解释中,map 步骤将所有值映射到 1。例如,在最常见的示例(计算字符串中单词的出现次数)中,Map 部分拆分每个单词,然后将其映射到值 1。

Reduce 部分然后组合/减少类似单词,将它们出现的次数相加,以便它们映射到 N 而不是 1(N 是单词出现的次数)。

我不明白的是:为什么还要首先将它们映射到 1?似乎它们总是映射到 1。为什么不将它们分开,然后在 Reduce 步骤中进行映射,然后同时总结所有内容?

我确信一定有一个我想不出的充分理由。谢谢!

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

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2016-08-11
      • 2014-11-20
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多