map-reduce 機能を実現するために yelps MRJob ライブラリを使用しています。map reduce には、キーに基づいて値をソートする内部ソートおよびシャッフル アルゴリズムがあることを知っています。したがって、マップフェーズの後に次の結果が得られた場合
(1, 24) (4, 25) (3, 26)
ソートとシャッフルのフェーズで次の出力が生成されることはわかっています
(1, 24) (3, 26) (4, 25)
どっちが予想通り
しかし、2 つの類似したキーと異なる値がある場合、並べ替えとシャッフル フェーズで最初に表示される値に基づいてデータが並べ替えられるのはなぜですか?
たとえば、マッパーから次の値のリストがある場合
(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 ライブラリ固有のものですか? 値に基づいてこのソートを停止する方法はありますか??
コード
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()