所以我有一个以前作业的输出文件,格式是这样的(.txt文件)
" 145
"Defects," 1
"Information 1
"Plain 2
"Project 5
"Right 1
#51302] 1
$5,000) 1
& 3
'AS-IS', 1
( 1
("the 1
每行的左侧是我从文档中读取的单词,每行右侧的数字是我计数的次数。我想使用Python创建另一个map reduce作业;Hadoop Streaming,查找top-k值。这里是5。我很难想象映射器应该做什么。
我应该解析每行并将每个单词和计数附加到列表中吗?然后从这些列表中,我要取最上面的k个值并把它发送给减速器吗?然后减速器读取所有这些列表并只返回前k个值?如果有人可以通过伪代码提供一些建议或纠正我,如果我在错误的道路上,这将是感激的。谢谢!
你的思路基本是对的。将您的单词作为映射器任务的Key,并将计数作为Value。如果在您的输入文件中,您可以为相同的单词和不同的计数获得多个条目,那么您就不能从中取出top K。然后你需要把数据汇总然后找出最上面的K。这应该在减速机中完成。因为reducer要接收到所有的数据对于同一个键,所以它可以聚合完整的数据并取出top K.但是需要另一个链式map reduce来从所有的记录中找出top K,其中你需要有一个reducer来查找top元素。
但是如果你的输入文件有一个键的条目,你可以从所有映射器中发出top K,然后把它发送给1个Reducer,从所有映射项中找出top K。