使用 Python 和 Hadoop Streaming 查找 Top-K
Finding Top-K using Python & Hadoop Streaming
所以我有一个以前作业的这种格式的输出文件(.txt 文件)
" 145
"Defects," 1
"Information 1
"Plain 2
"Project 5
"Right 1
#51302] 1
,000) 1
& 3
'AS-IS', 1
( 1
("the 1
每行左边是我从文档中读到的单词,每行右边的数字是我数过的次数。我想创建另一个 map reduce 作业,使用 Python & Hadoop Streaming 来查找前 k 个值。在这种情况下,假设为 5。我无法想象映射器应该做什么。
我应该解析每一行并将每个单词附加到列表中吗?然后,我会从这些列表中获取前 k 个值并将其发送到 reducer 吗?然后 reducer 读取所有这些列表并且 returns 只读取前 k 个值?如果有人可以通过伪代码提供一些建议,或者如果我在错误的道路上纠正我,我们将不胜感激。谢谢!
您几乎走在正确的轨道上。将您的单词视为映射器任务的键,将计数视为值。如果在您的输入文件中,您可以获得相同单词和不同计数的多个条目,那么您无法从中取出前 K 个。然后你必须聚合数据然后找出前 K 。这将在 reducer 中完成。由于 reducer 应接收同一个键的所有数据,它可以聚合完整的数据并取出前 K。但是必须有另一个链式 map reduce 来找出所有记录中的前 K,你应该有 1 个 reducer查找顶部元素。
但是如果你的输入文件有一个键的条目一次,你可以只从所有映射器发出前 K 个,然后将它发送到 1 个 Reducer 以从所有映射条目中找出前 K 个。
所以我有一个以前作业的这种格式的输出文件(.txt 文件)
" 145
"Defects," 1
"Information 1
"Plain 2
"Project 5
"Right 1
#51302] 1
,000) 1
& 3
'AS-IS', 1
( 1
("the 1
每行左边是我从文档中读到的单词,每行右边的数字是我数过的次数。我想创建另一个 map reduce 作业,使用 Python & Hadoop Streaming 来查找前 k 个值。在这种情况下,假设为 5。我无法想象映射器应该做什么。
我应该解析每一行并将每个单词附加到列表中吗?然后,我会从这些列表中获取前 k 个值并将其发送到 reducer 吗?然后 reducer 读取所有这些列表并且 returns 只读取前 k 个值?如果有人可以通过伪代码提供一些建议,或者如果我在错误的道路上纠正我,我们将不胜感激。谢谢!
您几乎走在正确的轨道上。将您的单词视为映射器任务的键,将计数视为值。如果在您的输入文件中,您可以获得相同单词和不同计数的多个条目,那么您无法从中取出前 K 个。然后你必须聚合数据然后找出前 K 。这将在 reducer 中完成。由于 reducer 应接收同一个键的所有数据,它可以聚合完整的数据并取出前 K。但是必须有另一个链式 map reduce 来找出所有记录中的前 K,你应该有 1 个 reducer查找顶部元素。
但是如果你的输入文件有一个键的条目一次,你可以只从所有映射器发出前 K 个,然后将它发送到 1 个 Reducer 以从所有映射条目中找出前 K 个。