因此,我有一个来自以前作业的这种格式的输出文件(.txt文件)
" 145
"Defects," 1
"Information 1
"Plain 2
"Project 5
"Right 1
#51302] 1
$5,000) 1
& 3
'AS-IS', 1
( 1
("the 1每一行的左边是我从文档中读取的单词,每行右边的数字是我数过它的次数。我想创建另一个map reduce作业,使用Python和Hadoop流来查找top-k值。在这种情况下,假设是5。我很难想象映射器应该做什么。
我是否应该解析每一行,并将每个单词和计数附加到列表中。然后,从这些列表中,我是否将获取前k个值并将其发送到reducer?然后reducer读取所有这些列表并只返回top-k值?如果有人可以提供一些建议,通过伪代码或纠正我,如果我在错误的道路上,将不胜感激。谢谢!
发布于 2016-09-25 22:57:13
你几乎走上了正确的道路。考虑您的单词作为关键字,计数作为映射器任务的值。如果在您的输入文件中,您可以获得相同单词的多个条目和不同的计数,那么您不能从中提取前K。然后你必须聚合数据,然后找出top K。这将在减速机中完成。由于reducer将接收同一键的所有数据,因此它可以聚合完整的数据并取出top K。但是,必须有另一个链式map reduce才能在所有记录中找出top K,其中您将有一个reducer来查找top元素。
但是,如果您的输入文件只有一次键条目,您可以只从所有映射器中发出top K,然后将其发送到1 Reducer,以便从所有map条目中找出top K。
https://stackoverflow.com/questions/39681761
复制相似问题