小编use*_*751的帖子

使用Hadoop Streaming和Python减少Map中的产品

我正在学习Python和Hadoop.我使用pythong + hadoop流完成了官方网站提供的设置和基本示例.我考虑过实现2个文件的连接.我完成了equi-join,检查两个输入文件中是否出现相同的密钥,然后按顺序输出密钥以及文件1和文件2中的值.等同连接按预期工作.

现在,我希望进行不等式连接,这涉及在应用不等式条件之前找到Cross Product.我正在使用相同的映射器(我需要更改它)并且我更改了reducer以使其包含嵌套循环(因为file1中的每个键值对都必须与file2中的所有键值对匹配).这不起作用,因为您只能浏览一次流.现在,我想到了在reducer中存储'some'值并将它们进行比较的选项,但我不知道'怎么'很多.朴素的方法是将整个file2内容存储在一个数组(或类似的结构)中,但这是愚蠢的,违背了分布式处理的想法.最后,我的问题是

  1. 如何在reducer中存储值,以便我可以在两个文件之间交叉产品?

  2. 在equi-join中,Hadoop似乎将相同键的所有键值对发送到同一个reducer,这非常好,适用于该情况.但是,我如何改变这种行为(如果需要),以便所需的键值对分组正确的减速器?

示例文件:http: //pastebin.com/ufYydiPu

Python Map/Reduce脚本:http: //pastebin.com/kEJwd2u1

我使用的Hadoop命令:

bin/hadoop jar contrib/streaming/hadoop-*streaming*.jar -file /home/hduser/mapper.py -mapper mapper.py -file /home/hduser/ireducer.py -reducer reducer.py -input /user/hduser/inputfiles/* -output /user/hduser/join-output
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助/提示.

python hadoop mapreduce

11
推荐指数
1
解决办法
1609
查看次数

标签 统计

hadoop ×1

mapreduce ×1

python ×1