Я думаю, вы бы предпочли спросить, почему некоторые конфигурации (например, spark.dynamicAllocation.minExecutors
) нельзя установить с помощью spark2.conf.set
против SparkSession.config
?
spark.dynamicAllocation.minExecutors
, чтобы контролировать, как выполнять задания Spark.Самое главное, чтобы контролировать количество исполнителей и, как таковой, не должны быть установлены в приложении Spark.Я даже удивлен, узнав, что это сработало.На самом деле это не должно быть ИМХО.
Причина, по которой эту и некоторые другие конфигурации не следует устанавливать в приложении Spark, заключается в том, что они управляют средой выполнения для базовой среды выполнения Spark (которая работала за кулисами Spark SQL).и как таковое должно быть изменено с помощью spark-submit
, что больше для разработчиков приложений или администраторов, чем для самих разработчиков.Независимо от того, используется динамическое распределение (исполнителей) или нет, это не влияет на деловое использование Spark и является решением, которое необходимо принять после разработки приложения.
С учетом сказанного позвольте мне ответить на ваш вопрос напрямую,некоторые конфигурации необходимо настроить до создания экземпляра SparkSession
, поскольку они управляют тем, как будет создаваться этот экземпляр.После того, как вы создали экземпляр, при вызове spark2.conf
экземпляр уже настроен, и некоторые конфигурации невозможно изменить никогда.Кажется, что spark.dynamicAllocation.minExecutors
входит в число конфигураций, которые нельзя изменить после создания экземпляра SparkSession
.И учитывая то, что я сказал ранее, я рад слышать, что это так (но, к сожалению, не во всех случаях).