我正在制作map-reduce作业,包含多个步骤。使用mrjob每一步都接收上一步输出。问题是我不想要它。
我想要的是提取一些信息并在第二步中对所有输入使用它等等。是否可以使用mrjob执行此操作?
注意:由于我不想使用emr,this question对我没什么帮助。
更新:如果在单个作业上无法执行此操作,我需要在两个单独的作业中执行此操作。在这种情况下,有没有办法包装这两个工作并管理中间产出等?
答案 0 :(得分:2)
您可以使用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