Во-первых, coalesce(1)
не гарантирует, что все ваши данные будут находиться в одном узле, поэтому для использования repartition(1)
это приведет к объединению в одном узле всех ваших данных.coalesce
группирует только разделы в одном узле, поэтому, если ваши данные распределены по 5 узлам (по несколько разделов в каждом), в конце останется 5 разделов.repartition
принудительно перемешать, чтобы переместить все ваши данные в один узел.
Но, если вас беспокоит количество разделений в агрегациях, это зависит от того, является ли агрегация всего лишь reduce
от всехваши данные, спарк SQL будет пытаться уменьшить сначала в каждом узле, а затем уменьшить результат каждого узла, примером будет подсчет.Но для агрегированных агрегированных данных, таких как подсчет количества элементов с идентификатором, спарк сначала сокращается в каждом узле, а затем перетасовывает данные в сегменты, чтобы убедиться, что все сокращения каждого узла для одного и того же идентификаторав том же узле, и уменьшите их снова.Количество сегментов настраивается с помощью свойства spark.sql.shuffle.partitions
, и каждое из них будет выполнено как задание в вашей работе.Будьте осторожны, так как установка spark.sql.shuffle.partitions
на один может замедлить работу других частей вашего процесса, таких как объединения или большие агрегации, или привести к ошибкам нехватки памяти.