我目前正在用Python为Hadoop教程编写一些数据处理代码,并遇到一些我不太了解的问题。这是代码:
from mrjob.job import MRJob
class tutorial4(MRJob):
def mapper(self, _, line):
fields = line.split(',')
stockTotal = int(float(fields[6]) * float(fields[7]))
key = fields[1]
date = fields[2]
pair = (key, date, stockTotal)
yield(None, pair)
def reducer(self, _, pair):
pair = list(pair)
sortedValues = sorted(pair, reverse = True, key = pair[2])
yield(None, pair)
if __name__ == '__main__':
tutorial4.run()
我在这里遇到的问题是Mapper对象中的yield关键字正在返回生成器对象。我在Reducer对象中需要一个列表,因此我试图通过执行以下操作将“配对”列表从“映射器”转换为列表:
pair = list(pair)
执行此操作并尝试运行它时,Python返回“无法调用列表对象”错误。现在,我在这里和其他地方查看了一些其他答案,标准答案似乎是我在代码中的其他位置使用列表,而不是Python本身内置的List对象,但我不在此处执行此操作,并且无法找出出什么问题。有人可以帮我吗?