repartition vs coalesce 💗 Вопрос у каждого первого. Нужны для изменения количества партиций в датафрейме. Как итог - файлов на диске. По умолчанию это 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
5 месяцев назад