首页 > 解决方案 > How to change the name of Spark application after it is started?

问题描述

I am having trouble updating/reconfiguring a predefined Spark Context called "spark"

spark.sparkContext._conf.get("spark.app.name")

Returns the app name 'Databricks Shell' I want to update this and I try using:

spark.conf.set('spark.app.name', 'New_Name')

However this does not update anything, because when I again run

spark.sparkContext._conf.get("spark.app.name")

I still get 'Databricks Shell' How do I update or make any changes to the spark context?

标签: apache-sparkpyspark

解决方案


tl;dr在 Spark 应用程序启动并运行后,您无法更改其名称。


为时已晚,因为其他服务可以依赖该值并适当地初始化自己(例如 Web UI)。

您可以期望这样的更改会传播到其他 Spark 服务,但事实并非如此。

这就是您在启动 Spark 应用程序时定义应用程序名称和主 URL 的原因。在启动时设置这两个值是一个先决条件。


请注意,这spark.sparkContext._conf.get("spark.app.name")是一个 hack,你应该真正使用它spark.sparkContext.appName

另请注意,您用于配置的对象类型是不同的,它们实际上用于两个不同的模块 - Spark Core ( SparkContext) 和 Spark SQL ( SparkSession.conf)。

并且在 Spark 的最新版本中,_conf不再可访问。

scala> spark.version
res2: String = 2.4.4

scala> spark.sparkContext._conf.get("spark.app.name")
<console>:24: error: variable _conf in class SparkContext cannot be accessed in org.apache.spark.SparkContext
       spark.sparkContext._conf.get("spark.app.name")
                          ^

您实际上应该使用它spark.sparkContext.getConf

同样,这两个配置对象是不同的。

scala> :type spark.sparkContext.getConf
org.apache.spark.SparkConf

scala> :type spark.conf
org.apache.spark.sql.RuntimeConfig

推荐阅读