2016-09-24 47 views
1

所以我必须从以前的作业的输出文件格式(txt文件)查找最-K

" 145 
"Defects," 1 
"Information 1 
"Plain 2 
"Project 5 
"Right 1 
#51302] 1 
$5,000) 1 
& 3 
'AS-IS', 1 
( 1 
("the 1 

每条线的左侧,是我读单词从文档和每行右侧的数字是我计算它的次数。我想使用Python & Hadoop Streaming来创建另一个地图缩减作业,以查找top-k值。在这种情况下,我们说5。我无法想象映射器应该做什么。

我应该分析每一行并将每个单词和计数附加到列表中。那么从这些列表中,我会采取top-k值并将其发送给reducer吗?然后reducer读取所有这些列表并只返回top-k值?如果有人可以通过伪代码提供一些建议或纠正我,如果我在错误的道路上,将不胜感激。谢谢!

回答

0

你几乎走在正确的轨道上。考虑你的词作为关键字,并将计数作为你的映射器任务的价值。如果在你的输入文件中,你可以得到同一个单词和不同计数的多个条目,那么你不能从它中取出最高的K.那么你将不得不汇总数据,然后找出最重要的K。这应当在减速机中完成。由于缩减器应该接收同一个键的所有数据,它可以聚合完整的数据并取出最高的K.但是然后必须有另一个链映射减少以找出所有记录中的最高K,其中你应该有1个缩减器找到最重要的元素。

但是,如果您的输入文件有一次输入密钥的条目,则可以从所有映射器发出顶部K,然后将其发送到1个Reducer以从所有映射条目中找出顶部K.