В настоящее время я пишу некоторый код обработки данных на 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()
Проблема, с которой я столкнулся, заключается в том, что ключевое слово yield в объекте Mapper возвращает объект генератора. Мне нужен список в объекте Reducer, поэтому я пытаюсь превратить список пар из Mapper в список, выполнив:
pair = list(pair)
Когда я делаю это и пытаюсь запустить его, Python возвращает ошибку «Объект списка не вызывается». Теперь я рассмотрел несколько других ответов здесь и в других местах, и стандартный ответ, по-видимому, заключается в том, что я использую списки где-то еще в коде, а не встроенный объект List из самого Python, но я не делаю этого здесь и не могу понять, что не так. Может ли кто-нибудь помочь мне здесь?