2014-11-05 71 views
1

我使用python開發的MapReduce程序,當我使用map.py和reduce.py通過COMAND行:的MapReduce沒有排序

cat passengers.dat | python map.py | sort | python reduce.py 

結果是好的。但如果我嘗試使用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 

結果是:

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 

但是,當我重寫我的減少我們的行「減少」接收到理解什麼是問題:

#!/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 

第五列無序!!!爲什麼??!

謝謝

我在下面發表我的解決方案!

+0

我不能複製你做的一切,但我創建的打印輸入的每一行喜歡你然後將其傳遞到排序Python程序。我輸入你的未分類輸入開始,它打印出所有排序的東西。所以我不知道該告訴你什麼。 – 2014-11-05 18:39:28

+0

謝謝AtlasMeh-ed我解決了這個問題。 :) – MrElefant 2014-11-05 23:48:54

+0

你應該[回答你自己的問題](http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)。 – irrelephant 2014-11-06 07:26:49

回答

0

我解決了這個問題,這個問題是MapReduce的使用鍵值,並有太多的按鍵,所以我已實施該解決方案是重寫映射器返回:

return 'value1#value2#value3#value4#value5#value6 \t value7' 

通過這種方式MapReduce的排序完美的關鍵,我可以拆分減速機。

我希望這將是有益的