Партиции в Spark: откуда берутся, сколько нужно и почему это главный параметр
Партиция — часть датасета, обрабатываемая одной задачей, поэтому число партиций задаёт и параллелизм, и размер единицы работы. При чтении число партиций определяется источником: для Parquet это размер файлов и spark.sql.files.maxPartitionBytes (128 МБ по умолчанию), для JDBC — заданные границы, для мелких файлов — их количество. После shuffle число партиций диктует spark.sql.shuffle.partitions, у которого исторический дефолт 200 — совершенно не связанный с вашими данными и размером кластера. Ориентир: партиция в сотни мегабайт и число партиций кратное числу ядер, обычно в два-четыре раза больше. Слишком мало партиций — простаивающие ядра и OOM на больших задачах; слишком много — накладные расходы на планирование и мелкие файлы на записи. Менять число можно двумя способами: repartition() делает полный shuffle и выравнивает размеры, coalesce() только склеивает соседние партиции без shuffle и потому дешевле, но перекос не лечит.