gpt4 book ai didi

python - Python Map Reduce Mr工作

转载 作者:行者123 更新时间:2023-12-02 19:00:03 24 4
gpt4 key购买 nike

我是python编程的新手,所以如果我提出一些容易解决的问题,请事先谅解。我想使用MapReduce处理具有一些值的csv文件,并且输出必须返回最大值。这是我到目前为止编写的脚本:

from mrjob.job import MRJob

class MRWordCounter(MRJob):
def mapper(self, key, line):
for word in line.split(','):
yield 'MAXIMUM VALUE IN FILE:',int(word)


def reducer(self, word, occurrences):
yield word, max(occurrences)


if __name__ == '__main__':
MRWordCounter.run()

现在,脚本可以正常工作,可以映射并减小到最大值并将其打印为输出,但是我认为用yield 'MAXIMUM VALUE IN FILE:'实现它的方式是错误的,因为映射器始终将字符串发送给reducer。有人可以确认这是否是错误的实现方式,并向我推荐如何解决该问题吗?

最佳答案

您的方法是正确的。正如您提到的,映射器始终将MAXIMUM VALUE IN FILE:作为唯一键发送给化简器,这意味着它在此阶段与作业无关。请记住,映射器只会对最终目标进行一些桥接操作。不要将此作为标准,但是我认为,就代码的可读性而言,映射的值不是文件中的最大值,因此不应使用MAXIMUM VALUE IN FILE:键对其进行标记。只有化简器知道哪个是最大数,因此应由化简器包装答案,并标记最终结果。

在这种情况下,您可以只从映射器发送None作为键,然后将您认为更好地描述最终结果的任何东西添加到reducer的输出中,在这种情况下,最大数目。

我建议改用这种方法。 (我可以随意更改一些变量名来阐明代码的作用)

from mrjob.job import MRJob


class MRFindMax(MRJob):

def mapper(self, _, line):
for number in line.split(','):
yield None, int(number)

# Discard key, because it is None
# After sort and group, the output is only one key-value pair (None, <all_numbers>)
def reducer(self, _, numbers):
yield "Max value is", max(numbers)


if __name__ == '__main__':
MRFindMax.run()

我希望您发现这个答案不仅对编写正确的代码有用,而且对您更熟悉的代码有用。

关于python - Python Map Reduce Mr工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49324892/

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