Как конкретно определить вход для каждого шага карты в MRJob?

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

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

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

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

1 ответ

Решение

Вы можете использовать бегунов

Вам нужно будет определить задания отдельно и использовать другой скрипт 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
Другие вопросы по тегам