我在这里阅读了有关 MapReduce的信息,他们给出的第一个示例是计算文档中每个单词的出现次数。我想知道,假设你想获得文档中出现频率最高的 20% 的单词,你怎么能做到这一点?这似乎不自然,因为集群中的每个节点都看不到整个文件,只能看到单个单词所有出现的列表。有没有办法做到这一点?
问问题
185 次
1 回答
0
是的,您当然可以做到这一点:通过强制 hadoop 只有一个 reducer(尽管使用这种方法,您会失去分布式计算本身的优势)。
这可以按如下方式完成:
// Configuring mapred to have just one reducer
conf.setInt("mapred.tasktracker.reduce.tasks.maximum", 1);
conf.setInt("mapred.reduce.tasks", 1);
现在,由于您只有一个减速器,您可以跟踪前 20% 并将它们排放到run()
减速器cleanup()
中。请参阅此处了解更多信息。
于 2013-03-01T19:27:44.533 回答