将数据从所有Map器发送到所有还原器

ajsxfq5m  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(325)

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

5f0d552i

5f0d552i1#

你可以用定制的 Partitioner 为此目的。
考虑到减速器的数量 n 你可以发出你的字数 n 带钥匙的时间 1 , 2 , ... n 在你的Map上。习俗 Partitioner 类将确保 i 仅获取具有键的值 i .

相关问题