使用Python& amp;找到Top-K Hadoop Streaming

时间:2016-09-24 23:04:06

标签: python python-2.7 hadoop mapreduce hadoop-streaming

所以我有一个上一个作业的输出文件(.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 Streaming,找到top-k值。在这种情况下,我们说5。我无法看到映射器应该做什么。

我应该解析每一行并将每个单词和计数附加到列表中。然后从这些列表中,我将获取top-k值并将其发送到reducer?然后reducer读取所有这些列表并仅返回top-k值?如果有人可以通过伪代码提供一些建议或纠正我,如果我走错了路,我们将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

你几乎走在正确的轨道上。将您的单词视为密钥,将计数视为映射器任务的值。如果在输入文件中,您可以获得同一个单词和不同计数的多个条目,那么您无法从中取出前K个。然后你必须聚合数据,然后找出前K。这应该在减速机中完成。由于reducer将接收相同密钥的所有数据,它可以聚合完整数据并取出前K.但是必须有另一个链式映射reduce以找出所有记录中的前K个,其中你将有1个reducer for找到最重要的元素。

但是如果您的输入文件有一个键的条目,您可以从所有映射器中发出前K,然后将其发送到1 Reducer以查找所有映射条目中的前K个。