💗 Вопрос у каждого первого.
Нужны для изменения количества партиций в датафрейме. Как итог - файлов на диске.
По умолчанию это 200, можно переопределить при создании спарк сессии конфигом
spark.sql.shuffle.partitionsПосмотреть количество партиций можно так:
df.rdd.getNumPartitions()
📚 Пример. У нас есть датафрейм [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] с 4 партициями:
Partition A: 1, 2
Partition B: 3, 4, 5
Partition C: 6, 7
Partition D: 8, 9, 10
Делаем так:
df_nums.repartition(2)
Partition ABC: 1, 3, 5, 6, 8, 10
Partition XYZ: 2, 4, 7, 9
Repartition
🖇делает партиции равномерными
🖇может увеличивать и уменьшать количество партиций
🖇под капотом шафл
В нашем примере циферки из каждой партиции размазались двум финальным партициям - это и есть шафл (перетасовка данных между экзекьюторами).
Именно за счет шафла работает первое и второе.
df_nums.coalesce(2)
Partition A: 1, 2, 3, 4, 5
Partition C: 6, 7, 8, 9, 10
Coalesce
🖇равномерность не гарантирована
🖇может только уменьшать
🖇данные не шафлит, а склеивает
Файлы клеятся друг за другом (без шафла), поэтому умеет только уменьшать (из склеенных файлов обратно расклеить уже нельзя).
В нашем примере B просто приклеилось к A, а D к C
#spark_tips
