假设我想查找每个单词在某些文本中出现的次数。在MapReduce中,为什么map函数在查找单词出现时输出1?
我的理解是文本被分成几部分,每一部分都被传递给map
。然后map
会得到字出现的每个部分,并将结果传递到reduce
,像这样:
for each word w in document:
occurrences[w] += 1
return occurrences
然而,根据MapReduce paper和wikipedia,map
只会发出1对每个字,例如:
for each word w in document:
emit(w, 1)
这不就是因为它将不得不遍历每个单词反正直接将文本部分传递到reduce
是同样的事情?
此外,只是为了确保。如果我想用MapReduce对大数组进行排序,map
是否将其排序为数组的一部分,然后reduce
会合并排序后的数组,如mergesort?
喂,让我们说split1包含'cat','cat','mat'。为什么我不配置地图发出'',''而不是'','',''?谢谢 –
mzee99
@ mzee99 - 你可以。但是,这将需要你的地图持续为你的每个单词说明状态。组合器(https://hadooptutorial.wikispaces.com/Custom+combiner)通常用于执行您提到的步骤。 –
单向或双向效率方面是否存在差异? – mzee99