问题描述
我正在使用 mrjob 包运行 mapreduce 作业,我正在尝试使用 mapper raw,如下所示
class MRJOB(MRJob):
def mapper_raw(self,input_path,input_uri):
import csv
print(input_path,input_uri)
with open(input_path) as f:
reader = csv.reader(f)
for line in reader:
if line:
yield (0,line)
def steps(self):
return [
MRStep(mapper=self.mapper_raw)
] #,reducer=self.reducer)]
if __name__ == "__main__":
MRJOB().run()
但是,如果我将其作为 python mrjobfile.py inputfile.csv
运行,则会出现以下错误:
TypeError: expected str,bytes or os.pathLike object,not nonetype
如何告诉 mrjob 将输入视为带有文件名的字符串?好像只是传入文件的第一行。
解决方法
您必须在 MRStep 中声明 mapper_raw
而不是 mapper
。所以,它会是什么样子:
def steps(self):
return [
MRStep(mapper_raw=self.mapper_raw)
] #,reducer=self.reducer)]