当我使用configure_options使用add_file_option将文件发送到节点时,为什么python冻结?

时间:2019-09-11 02:29:31

标签: python python-3.5 mrjob

我正在尝试在python中使用MRJob软件包。我想将文件(u.item)和代码一起发送到所有节点,因此我使用configure_options函数并使用add_file_option告诉python我将在命令行中向您发送文件。当我运行此命令时: !python MostPopularMovieNicer.py --items = u.item u.data 一切都停止了,python冻结了,却没有显示任何内容。

我已经运行了trace命令,并收到以下错误消息: TypeError:需要一个类似字节的对象,而不是'str'

从mrjob.job导入MRJob 从mrjob.step导入MRStep

类MostPopularMovieNicer(MRJob):

def configure_options(self):
    super(MostPopularMovieNicer, self).configure_options()
    self.add_file_option('--items', help='Path to u.item')

def steps(self):
    return [
        MRStep(mapper=self.mapper_get_ratings,
               reducer_init=self.reducer_init,
               reducer=self.reducer_count_ratings),
        MRStep(reducer = self.reducer_find_max)
    ]

def mapper_get_ratings(self, _, line):
    (userID, movieID, rating, timestamp) = line.split('\t')
    yield movieID, 1

def reducer_init(self):
    self.movieNames = {}

    with open("u.ITEM", encoding='ascii', errors='ignore') as f:
        for line in f:
            fields = line.split('|')
            self.movieNames[fields[0]] = fields[1]

def reducer_count_ratings(self, key, values):
    yield None, (sum(values), self.movieNames[key])


def reducer_find_max(self, key, values):
    yield max(values)

如果名称 =='主要”:     MostPopularMovieNicer.run()

未显示任何错误,并且python冻结。我必须退出软件才能运行其他代码。

1 个答案:

答案 0 :(得分:0)

您应该使用 configure_args add_file_arg 而不是configure_options和add_file_option。 configure_options在MRjob中不再可用。 该链接可能会帮助您:https://mrjob.readthedocs.io/en/latest/job.html