我正在进行一项由多个步骤组成的map reduce作业。使用mrjob,每个步骤都会接收上一个步骤的输出。问题是我不想这样。
我想要的是提取一些信息,并在第二步中对所有输入使用它,等等。使用mrjob可以做到这一点吗?
注意:由于我不想使用emr,这个问题对我没有多大帮助。
更新:如果不能在一个作业上完成,我需要在两个单独的作业中完成。在这种情况下,有没有办法包装这两个作业并管理中间输出等?
您可以使用Runners
您必须单独定义作业,并使用另一个python脚本来调用它。
from NumLines import NumLines
from WordsPerLine import WordsPerLine
import sys
intermediate = None
def firstJob(input_file):
global intermediate
mr_job = NumLines(args=[input_file])
with mr_job.make_runner() as runner:
runner.run()
intermediate = runner.get_output_dir()
def secondJob(input_file):
mr_job = WordsPerLine(args=[intermediate,input_file])
with mr_job.make_runner() as runner:
runner.run()
if __name__ == '__main__':
firstJob(sys.argv[1])
secondJob(sys.argv[1])
并且可以通过以下方式调用:
python main_script.py input.txt