Я использую python с потоковой передачей искры, и идея проста: сделать монитор потоковой передачи определенным каталогом, и как только появится новый txt-файл с несколькими существующими строками, он обрабатывается.
Дело в том, что естьбудет очень мало строк в каждом из текстовых файлов, но обработка каждой строки займет много времени.Поэтому я хочу, чтобы строки отправлялись разным исполнителям, чтобы они могли обрабатываться параллельно.Проблема в том, что все они отправляются одному исполнителю (или двум) ...
Код выглядит следующим образом:
lines = stream_context.textFileStream(monitor_dir).repartition(4)
lines.foreachRDD(process_stream)
def process_stream(time, rdd):
print('rdd partitions: {}'.format(rdd.getNumPartitions()))
rdd.map(lambda line: parse_each_line(line, other_params)).count()
Я получаю 4 исполнителя, поэтому я перераспределен как 4, и яя запускаю его в реальном кластере с режимом кластера, и когда он печатается в методе "process_stream", rdd.getNumPartitions () == 4.
Поэтому не уверен, в чем проблема, это вызвано "Размер входного сплита », который находится в файловой системе Hadoop под капотом?