Hadoop 为什么MapReduce在映射步骤中将每个值映射为1?

Hadoop 为什么MapReduce在映射步骤中将每个值映射为1?,hadoop,mapreduce,Hadoop,Mapreduce,我正在尝试找出MapReduce,到目前为止,我认为我对它的理解还不错 然而,有一件事让我困惑。在我能找到的每个MapReduce示例和解释中,映射步骤都将所有值映射为1。例如,在最常见的示例中(计算字符串中单词的出现次数),Map部分将每个单词拆分,然后将其映射到值1 然后,Reduce部分组合/减少类似的单词,将它们出现的次数相加,使它们映射到N而不是1(N是单词出现的次数) 我不明白的是:为什么要把它们映射到1呢?看起来它们总是映射到1。为什么不将它们分开,然后在Reduce步骤中,在那里

我正在尝试找出MapReduce,到目前为止,我认为我对它的理解还不错

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

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

我不明白的是:为什么要把它们映射到1呢?看起来它们总是映射到1。为什么不将它们分开,然后在Reduce步骤中,在那里进行映射,同时对所有内容进行汇总

我肯定有一个很好的理由我就是想不起来。谢谢


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

映射器的输出是根据您想要的用例决定的。在单词计数中,我们希望映射器分离单个单词并输出每个单词的出现次数。为输入中的每个键值对(输入拆分)调用映射器。这是每行的价格。键是偏移量,值是整个句子。在调用reducer之前将执行分组。因此,所有单词都被分组,并且每次出现(此处为1)都被计数。将1作为映射器输出并不难。如果您注意到Hadoop:Definitive guide中的数据集示例,那么它们将年份和温度作为映射器输出。用例是根据年份进行分组,并找到最高/最低温度。为了基本理解,您可以将其视为组参数。快乐学习