如何专门确定MRJob中每个地图步骤的输入?

时间:2014-09-28 06:20:49

标签: python hadoop mapreduce mrjob

我正在制作map-reduce作业,包含多个步骤。使用mrjob每一步都接收上一步输出。问题是我不想要它。

我想要的是提取一些信息并在第二步中对所有输入使用它等等。是否可以使用mrjob执行此操作?

注意:由于我不想使用emr,this question对我没什么帮助。

更新:如果在单个作业上无法执行此操作,我需要在两个单独的作业中执行此操作。在这种情况下,有没有办法包装这两个工作并管理中间产出等?

1 个答案:

答案 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