PYSPARK - Решение для низкой производительности при записи данных в файл партера при использовании repartition () перед partitionby ()? - PullRequest
0 голосов
/ 24 сентября 2019

Я хочу записать свои данные (содержащиеся в кадре данных) в файлы паркета.Мне нужно разделить данные на две переменные: «месяц» и «уровень».(данные всегда фильтруются по этим двум переменным)

Если я сделаю следующее data.write.format("parquet").partitionBy("month", "level").save("..."), я получу ожидаемые разделы, однако у меня много файлов на разделы.Некоторые из этих файлов очень маленькие, что ухудшает производительность запросов, выполняемых к данным.

Чтобы исправить это, я попытался применить repartition перед записью данных: data.repartition("month", "level").write.format("parquet").partitionBy("month", "level").save("..."), что дает мне именно то, чтоя хочу (1 файл на раздел, с приличным размером для каждого файла).

===> проблема здесь в том, что перераспределение вызывает полное перемешивание данных, что означает, что для входных данных400 Гб, я получаю несколько Тб в случайном порядке ...

Есть ли способ оптимизировать перераспределение () перед partitionby () или сделать это любым другим способом?

Спасибо!

...