【发布时间】:2013-02-28 10:43:08
【问题描述】:
我正在阅读有关 MapReduce here 的信息,他们给出的第一个示例是计算文档中每个单词的出现次数。我想知道,假设你想获得文档中出现频率最高的 20% 的单词,你怎么能做到这一点?这似乎不自然,因为集群中的每个节点都看不到整个文件,只能看到单个单词所有出现的列表。 有没有办法做到这一点?
【问题讨论】:
标签: mapreduce
我正在阅读有关 MapReduce here 的信息,他们给出的第一个示例是计算文档中每个单词的出现次数。我想知道,假设你想获得文档中出现频率最高的 20% 的单词,你怎么能做到这一点?这似乎不自然,因为集群中的每个节点都看不到整个文件,只能看到单个单词所有出现的列表。 有没有办法做到这一点?
【问题讨论】:
标签: mapreduce
是的,你当然可以做到这一点:通过强制 hadoop 只有一个 reducer(尽管使用这种方法你失去了分布式计算本身的优势)。
这可以按如下方式完成:
// Configuring mapred to have just one reducer
conf.setInt("mapred.tasktracker.reduce.tasks.maximum", 1);
conf.setInt("mapred.reduce.tasks", 1);
现在由于您只有一个 reducer,您可以跟踪前 20% 并将它们发送到 reducer 的 run() 或 cleanup() 中。请参阅here 了解更多信息。
【讨论】: