我有一个由单词行组成的数据集(以文件的形式)。我想找到20个更频繁出现的单词。这是一个庞大的数据集,所以我正在并行处理它。现在我将数据集划分为子集并将它们提供给每个并行工作器。然后,每个并行工作者将找到每个单词的计数,并返回最常用单词的列表及其计数。然后汇总所有列表,并从每个工作人员的结果中汇编出整个数据集中排名前20位的最常用词。
每个工作人员需要返回聚合器多少个字/计数对才能保证我能从整个数据集中获得前20个单词?
答案 0 :(得分:1)
您需要处理所有单词,直到第20和第21个最常用单词之间的差异大于剩余的未处理单词数。
如果您需要排名前20个最常用词,那么您需要处理所有内容。
答案 1 :(得分:0)
这是不可能的。例如,考虑一下你有四个工人的可能性,而工人1的单词频率与其他三个工人的频率相反。为了获得准确的计数,worker 1必须返回其整个数据集,以便可以聚合。
在一般情况下,每个工作人员必须将其所有数据返回到主节点进行聚合。
你正在做的是一个非常典型的地图和减少问题,可以在MapReduce或Map/Reduce - A visual explanation找到一个很好的讨论。