2014-09-28 5 views
4

Я работаю над сокращением задания на карту, состоящим из нескольких шагов. Используя mrjob, каждый шаг получает предыдущий шаг вывода. Проблема в том, что я этого не хочу.Как конкретно определить ввод для каждого шага карты в MRJob?

Я хочу извлечь некоторую информацию и использовать ее на втором шаге против всех входных данных и так далее. Можно ли это сделать с помощью mrjob?

Примечание: Поскольку я не хочу использовать emr, this question не очень помогает мне.

ОБНОВЛЕНИЕ: Если бы это было невозможно сделать на одном рабочем месте, мне нужно сделать это на двух отдельных работах. В этом случае, есть ли способ обернуть эти две работы и управлять промежуточным выходом и т. Д.?

+0

Не уверен, что, если я вас понимаю. Но вы считали использовать Оози или Весну? –

+0

Вопрос кажется немного абстрактным. Можете ли вы сделать свои очки более ясными, показывая нам какой-то код, и что именно вы пытаетесь сделать? –

+0

@ RadekTomšej Я пробовал, как sonic ответ. Каковы преимущества использования Oozie или Spring над этим подходом? Не могли бы вы дать ответы на некоторые примеры? – Mehraban

ответ

2

Вы можете использовать Runners

Вы должны определить рабочие места отдельно и использовать другой питон скрипт, чтобы вызвать его.

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 

 Смежные вопросы

  • Нет связанных вопросов^_^