Я хочу записать свои данные (содержащиеся в кадре данных) в файлы паркета.Мне нужно разделить данные на две переменные: «месяц» и «уровень».(данные всегда фильтруются по этим двум переменным)
Если я сделаю следующее data.write.format("parquet").partitionBy("month", "level").save("...")
, я получу ожидаемые разделы, однако у меня много файлов на разделы.Некоторые из этих файлов очень маленькие, что ухудшает производительность запросов, выполняемых к данным.
Чтобы исправить это, я попытался применить repartition
перед записью данных: data.repartition("month", "level").write.format("parquet").partitionBy("month", "level").save("...")
, что дает мне именно то, чтоя хочу (1 файл на раздел, с приличным размером для каждого файла).
===> проблема здесь в том, что перераспределение вызывает полное перемешивание данных, что означает, что для входных данных400 Гб, я получаю несколько Тб в случайном порядке ...
Есть ли способ оптимизировать перераспределение () перед partitionby () или сделать это любым другим способом?
Спасибо!