如何将输入路径传递给 MRJob.mapper_raw?

问题描述

我正在使用 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)]