Если вы не используете dynamic allocation
, вы в конечном итоге оставите большинство ядер неиспользованными во время выполнения. Представьте, что у вас есть 40 «слотов» для вычислений, но только 10 задач для обработки, поэтому 30 «слотов» будут пустыми (просто простаивающими).
Я должен добавить, что вышеизложенное очень упрощенная ситуация. В действительности у вас может быть несколько этапов, работающих параллельно, поэтому, в зависимости от вашего запроса, вы все равно будете использовать все 40 ядер (см., Например, Параллельно ли выполняются этапы в приложении в spark? )
Обратите внимание также, что spark.sql.shuffle.partitions
не единственный параметр, который определяет количество задач / разделов. Вы можете иметь различное количество разделов для
- чтения файлов
, если вы измените свой запрос с помощью repartition
, например, при использовании:
df
.repartition(100,$"key")
.groupBy($"key").count
ваше значение spark.sql.shuffle.partitions=10
будет перезаписано на 100 на этом шаге обмена