gpt4 book ai didi

hadoop - mapreduce 排序和洗牌如何工作?

转载 作者:可可西里 更新时间:2023-11-01 14:21:15 25 4
gpt4 key购买 nike

我正在使用 yelps MRJob 库来实现 map-reduce 功能。我知道 map reduce 有一个内部排序和随机播放算法,它根据键对值进行排序。因此,如果我在 map 阶段后得到以下结果

(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 库是特定的吗?无论如何要停止这种基于值的排序??

代码

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()

最佳答案

“排序”值的唯一方法是使用包含来自值本身的一些信息的复合键。您的键的 compareTo 方法可以确保键首先按实际键组件排序,然后按值组件排序。最后,您需要一个组分区器来确保在 reducer 中具有相同“键”组件(实际键)的所有键都被认为是相等的,并且在对 reduce 方法的一次调用中迭代关联的值。

这被称为“二次排序”,question similar此链接提供了一些示例链接。

关于hadoop - mapreduce 排序和洗牌如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14353842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com