1

我正在通过 Python mrjob 模块在 Map Reduce 作业中使用映射器内组合。因为我编写了一个发出单对的 mapper_final 函数,所以我确信只有一个键值对被发送到我的 reducer。

但是,我的 reduce 函数出错了:

  def reducer(self, key, occurrences):
    '''
    Calculates the final value.
    '''
    yield 'Final Value: ', occurrences[0] / 2

错误读取

File "calculateFinalValue.py", line 354, in reducer
    yield 'Final Value: ', occurrences[0] / 2
TypeError: 'generator' object has no attribute '__getitem__'

为什么我不能索引occurrences?该列表中应该只有一对,对吧?

4

1 回答 1

3

occurrences不是一个list,是一个generator。如果你想要一个list,你需要将生成器结果组装成一个列表。就像是:

list_occurrences = [ occ for occ in occurrences ]

或者

list_occurrences = list(occurrences)

yield 'Final Value: ', list_occurrences[0] / 2

或者您可以通过以下方式获得第一个出现值occurrences.next()

yield 'Final Value: ', occurrences.next() / 2
于 2012-09-23T21:02:41.690 回答