Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MapReduce没有排序_Python_Sorting_Mapreduce - Fatal编程技术网

Python MapReduce没有排序

Python MapReduce没有排序,python,sorting,mapreduce,Python,Sorting,Mapreduce,我正在使用python开发mapreduce程序,当我使用comand line的map.py和reduce.py时: cat passengers.dat | python map.py | sort | python reduce.py cat passengers.dat | python map.py | sort 结果是好的。但如果我尝试使用mapreduce: hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming-2.2.0

我正在使用python开发mapreduce程序,当我使用comand line的map.py和reduce.py时:

cat passengers.dat | python map.py | sort | python reduce.py
cat passengers.dat | python map.py | sort 
结果是好的。但如果我尝试使用mapreduce:

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming-2.2.0.2.0.10.0-1.jar -input passengers.dat -output /out -file map.py -file reduce.py -mapper map.py -reducer  reduce.py
结果是错误的,因为它似乎没有在减少之前进行排序

我得出这个结论是因为通过命令行:

cat passengers.dat | python map.py | sort | python reduce.py
cat passengers.dat | python map.py | sort 
结果是:

141181  2014    5   1   0   STA 267
141181  2014    5   1   1   END 1031
141181  2014    5   1   4   STA 1031
141181  2014    5   1   5   END 267
但是,当我重写reduce以编写“reduce”接收行以了解问题所在时:

#!/usr/bin/env python
import sys 
for line in sys.stdin:
        print line
结果未排序:

141181  2014    5   1   1   END 1031
141181  2014    5   1   0   STA 267
141181  2014    5   1   5   END 267
141181  2014    5   1   4   STA 1031
第五列乱了!!!为什么

多谢各位


我在下面发布我的解决方案

我解决了这个问题,问题是mapreduce使用键值,并且有太多的键,所以我实现的解决方案是重写mapper以返回:

return 'value1#value2#value3#value4#value5#value6 \t value7'
通过这种方式,mapreduce对键进行了完美排序,我可以在reducer上进行拆分


我希望它会有用

我不能复制您所做的一切,但我创建了一个python程序,它可以打印像您这样的每一行输入,然后将其传递给排序。我把你未分类的输入输入用管道输入,然后打印出所有已分类的内容。所以我不知道该告诉你什么。谢谢你,我已经解决了这个问题您应该这样做。谢谢,在我无法发布我的答案之前,现在是Yesell post,但让我在映射阶段为“\t”后找到了默认分隔符(请参阅)。您可以使用
-D stream.map.output.field.separator=。
(在本例中为句号,或者您希望的任何内容)对其进行更改。