Я читаю из многораздельной таблицы, в которой содержится около 4 миллиардов записей. Файлы, из которых я читаю, являются моими источниками, и я не могу контролировать их, чтобы изменить записи.
При чтении файлов через кадры данных для каждого раздела я создаю 2000 файлов размером менее 2 КБ. Это происходит из-за того, что раздел shuffle установлен на 2000, чтобы увеличить скорость выполнения.
Для решения этой проблемы следовал подход:
Я зациклился на пути таблицы HDFS, после того как его выполнение завершено, поскольку он создал список с путями данных [/dv/hdfs/..../table_name/partition_value=01,/dv/hdfs/..../table_name/partition_value=02..]
Для каждого такого пути я вычислил использование диска и размер блока из кластера и получил соответствующее количество разделов как no_of_partitions = ceil[disk_usage / block size]
, а затем записал данные в другое место с таким же значением partition_id, как [/dv/hdfs/..../table2_name/partition_value=01]
.
Теперь, несмотря на то, что это позволяет уменьшить размер небольших файлов до среднего размера блока 82 МБ с 2 КБ, на раздел требуется около 2,5 минут. Поскольку доступно 256 таких разделов, выполнение процесса занимает более 10 часов.
Пожалуйста, предложите любой другой метод, где это может быть достигнуто менее чем за 2 часа времени.