Как конкретно определить вход для каждого шага карты в 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