mapreduceに入れる前に特定のノードを抽出するためにXMLファイルを前処理しようとしています。私は、次のコードを持っている:Python mrjob mapreduce入力ファイルを前処理する方法
from mrjob.compat import jobconf_from_env
from mrjob.job import MRJob
from mrjob.util import cmd_line, bash_wrap
class MRCountLinesByFile(MRJob):
def configure_options(self):
super(MRCountLinesByFile, self).configure_options()
self.add_file_option('--filter')
def mapper_cmd(self):
cmd = cmd_line([self.options.filter, jobconf_from_env('mapreduce.map.input.file'])
return cmd
if __name__ == '__main__':
MRCountLinesByFile.run()
を、コマンドラインで、私が入力します。
python3 test_job_conf.py --filter ./filter.py -r local < test.txt
test.txt
はhereのような通常のXMLファイルです。 filter.py
はすべてのタイトル情報を検索するスクリプトです。
しかし、私は次のエラーを取得しています:
Creating temp directory /tmp/test_job_conf.vagrant.20160406.042648.689625
Running step 1 of 1...
Traceback (most recent call last):
File "./filter.py", line 8, in <module>
with open(filename) as f:
FileNotFoundError: [Errno 2] No such file or directory: 'None'
Step 1 of 1 failed: Command '['./filter.py', 'None']' returned non-zero exit status 1
mapreduce.map.input.file
、この場合でNone
をレンダリングするように見えます。 mrjob
が現在読んでいるファイルを読むために、mapper_cmd
関数に関数を要求するにはどうすればよいですか?