我有一个程序可以连续迭代mapper和reducer n
次。但是,对于每次迭代,每个键值对的映射器计算一个取决于n
的值。
from mrjob.job import mrjob
class MRWord(mrjob):
def mapper_init_def(self):
self.count = {}
def mapper_count(self, key, value):
self.count[key] = 0
print self.count[key]
# print correctly
yield key, value
def mapper_iterate(self, key, value):
yield key, value
print self.count[key]
#error
def reducer_iterate(self, key, value):
yield key, value
def steps(self):
return [
self.mr(mapper_init=self.mapper_init_def, mapper=self.mapper_count),
self.mr(mapper=self.mapper_iterate, reducer=self.reducer_iterate)
]
if __name__ == '__main__':
MRWord.run()
我定义了一个两步式mapper reducer,这样第一个定义了一个类变量self.count
。该程序产生错误AttributeError: 'MRWord' object has no attribute 'count'
。似乎每个步骤都定义了一个独立的mrjob类对象,并且该变量无法共享。还有另一种方法来实现这一目标吗?
答案 0 :(得分:1)
为什么不尝试在课堂上定义你的计数?
class MRWord(MRJob):
count = []
并删除
def mapper_init_def(self):
self.count = {}