f*********e 发帖数: 8453 | 1 (用python mrjob包)
能不能在mapper里赋值给一个公共变量在所有的reducer里用?比如mapper里统计各个
文件里的词频(文件名和数目未知),以二维表格式(每个词一行,每个文件一列,文件
没有的词填零)输出每个词在各个文件出现的次数。
我的代码本地测试可以完成上面要求,但是扔上hadoop cluster就出异常,说公共变量
没有赋值。
基本框架:
class MRcounter:
filenames=set()
def mapper(self, _, line):
self.filenames.add(current_filename)
yield word, {filename: count}
def reducer(self, word, count):
self.filenames=list(self.filenames)
output=[0]*len(self.filenames)
for c in count:
for k, c in count.items():
output[self.filenames.index(k)]=c
yield word, '\t'.join(output)
用测试输入样本在本地运行正确。上到hadoop cluster用同样的输入就报错。具体是那
个filenames在reducer里看到的是空,没被赋值。 |
|