gpt4 book ai didi

python - Map-Reduce/Hadoop 按整数值排序(使用 MRJob)

转载 作者:可可西里 更新时间:2023-11-01 15:16:33 28 4
gpt4 key购买 nike

这是一个简单的 Map-Reduce 排序功能的 MRJob 实现。在 beta.py 中:

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 中的协议(protocol)有关,因为协议(protocol)是特定于工作而不是特定于步骤的。

编辑(解决方案): 我已经找到了这个问题的答案。这个想法是,需要在每个数字前添加“O 字节”,以便每个数字中的字节数与最大数字中的字节数相同。至少那是我在类里面记得的。我现在不能添加答案,因为它不允许我,但这是我唯一的解决方案。如果有人有更透明和更简单的东西,请分享。

最佳答案

简单的解决方案(更强大的可能是基于调整 Hadoop 如何排序映射器输出)

class Beta(MRJob):

def mapper (self, _, line):
l = line.strip('\n').split()
yield '%010d'%int(l[1]), l[0]

def reducer(self, key, values):
yield int(key),int(list(values)[0])

关于python - Map-Reduce/Hadoop 按整数值排序(使用 MRJob),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20156817/

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