0

在此问题被标记为重复之前,请通读。

这个问题被问了很多次,没有明确的答案。假设我的任务是计算unigram数百万个文件中每个单词的概率。我可以从映射器发出字数,reducers 可以汇总每个单词的字数。然而,为了计算概率,我们需要单词的总数。一种方法是使用特殊键将每个映射器的单词数发送到每个化简器,并对键进行排序,以使这些计数早于单个计数到达。然后,reducer 可以简单地将从映射器接收到的计数相加,以获得单词总数。

但是如何让映射器向所有减速器发送计数?

我可以从工作属性中找出减速器的总数,比如n. 有没有办法Context.write() n从每个映射器调用次数并依次指定分区号从0n-1,以便数据到达所有减速器?

4

1 回答 1

1

您可以Partitioner为此目的使用自定义。

给定 reducer 的数量,您可以使用映射器中的键, , ...n发出您的 wordcountn次数。自定义类将确保 reducer仅获取带有 key 的值。12nPartitionerii

于 2013-10-10T21:49:53.093 回答