在这个问题被标记为重复之前,请通读一遍。
这个问题已经问了很多次,但都没有明确的答案。假设我的任务是计算 unigram
数百万文件中每个单词的概率。我可以从Map器中发出单词计数,而还原器可以聚合每个单词的计数。然而,要计算概率,我们需要总字数。一种方法是用一个特殊的键将每个Map器的字数发送到每个还原器,并对键进行排序,使这些计数比单个计数来得早。一个缩减器可以,然后简单地将从Map器接收到的计数相加,得到总字数。
但我如何让制图员把计数发送给所有的还原器呢?
我可以从作业属性中找出减速机的总数,比如说 n
. 没有办法打电话吗
Context.write() n
来自每个Map器的次数,并指定来自 0
至 n-1
从而使数据到达所有的减速器?
1条答案
按热度按时间5f0d552i1#
你可以用定制的
Partitioner
为此目的。考虑到减速器的数量
n
你可以发出你的字数n
带钥匙的时间1
,2
, ...n
在你的Map上。习俗Partitioner
类将确保i
仅获取具有键的值i
.