我正在使用yelps MRJob庫來實現map-reduce功能。我知道map reduce有一個內部排序和隨機算法,它根據它們的鍵對值進行排序。所以,如果我有地圖階段後的結果如下mapreduce如何排序和洗牌工作?
(1, 24) (4, 25) (3, 26)
我所知道的排序和洗牌階段將產生以下輸出
(1, 24) (3, 26) (4, 25)
這是預期
但是,如果我有兩個相似的鑰匙和不同的值爲什麼排序和混洗階段會根據出現的第一個值對數據進行排序?
例如 如果我有值從映射器下面的列表
(2, <25, 26>) (1, <24, 23>) (1, <23, 24>)
預期的輸出是
(1, <24, 23>) (1, <23, 24>) (2, <25, 26>)
但是,我得到的輸出是
(1, <23, 24>) (1, <24, 23>) (2, <25, 26>)
這是MRjob庫特定的嗎?無論如何,要根據數值來停止這種排序嗎?
CODE
from mrjob.job import MRJob
import math
class SortMR(MRJob):
def steps(self):
return [
self.mr(mapper=self.rangemr,
reducer=self.rangesort)]
def rangemr(self, key, line):
for a in line.split():
yield 1,a
def rangesort(self,numid,line):
for a in line:
yield(1, a)
if __name__ == '__main__':
SortMR.run()
對不起,在這裏提問:如何在運行本地時禁止按值排序? –