1
這是一個簡單的Map-Reduce排序功能的MRJob實現。在beta.py
:Map-Reduce/Hadoop按整數值排序(使用MRJob)
from mrjob.job import MRJob
class Beta(MRJob):
def mapper(self, _, line):
"""
"""
l = line.split(' ')
yield l[1], l[0]
def reducer(self, key, val):
yield key, [v for v in val][0]
if __name__ == '__main__':
Beta.run()
我運行使用文本吧:
1 1
2 4
3 8
4 2
4 7
5 5
6 10
7 11
人們可以使用這條命令:
cat <filename> | python beta.py
現在的問題是輸出的排序假設關鍵是類型爲string
(這可能就是這種情況)。輸出是:
"1" "1"
"10" "6"
"11" "7"
"2" "4"
"4" "2"
"5" "5"
"7" "4"
"8" "3"
,我想輸出是:
"1" "1"
"2" "4"
"4" "2"
"5" "5"
"7" "4"
"8" "3"
"10" "6"
"11" "7"
我不知道這是否與在MRJob協議擺弄作爲協議的具體工作,而不是一步具體的事情。
編輯(解決方案):我已經得到了答案。這個想法是需要在每個數字前面加上'O-bytes',這樣每個數字中的字節數與最大數字中的字節數相同。至少這是我從班上記得的。我現在不能添加答案,因爲它不會允許我,但這是我唯一的解決方案。如果有人有更透明和容易的事情,請分享。
所以這一個python腳本實際上創建爲整個集羣MapReduce工作(更強大的可能Hadoop是如何排序映射輸出基於調整)? ..我通常使用Hadoop Streaming時使用Python腳本來寫地圖減少.. –
嗯,我不知道,但是,是的,它可以。這就是'MRJob'啓用的功能。你可以在這裏閱讀更多關於它的內容 - http://pythonhosted.org/mrjob/。 – p0lAris