使用spark.conf.set()函数更新Spark属性真的安全吗?

问题描述 投票:0回答:1

假设我有一个代码:

val spark = SparkSession.builder().master("local").getOrCreate()

spark.conf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")

val partitionMode1 = spark.conf.get("spark.sql.sources.partitionOverwriteMode")
print(s"Partitioning: $partitionMode1")

val partitionMode2 = spark.sparkContext.getConf.get("spark.sql.sources.partitionOverwriteMode")
print(s"Partitioning: $partitionMode2")

此代码将因错误而失败

Exception in thread "main" java.util.NoSuchElementException: spark.sql.sources.partitionOverwriteMode
        at org.apache.spark.SparkConf.$anonfun$get$1(SparkConf.scala:245)
        at scala.Option.getOrElse(Option.scala:189)

如果我运行代码,我也不会在 Spark UI 环境中看到

partitionOverwriteMode
属性。

我知道我可以使用

val spark = SparkSession.builder().config("spark.sql.sources.partitionOverwriteMode", "dynamic").master("local").getOrCreate()

但想法是在创建会话后设置conf。

我的问题是使用

spark.conf.set
更新此类属性是否安全?

scala apache-spark
1个回答
0
投票

根据文档,Spark会话创建后,您将无法修改SparkConf。 https://spark.apache.org/docs/latest/api/scala/org/apache/spark/SparkConf.html

一旦 SparkConf 对象被传递到 Spark,它就会被克隆并且用户不能再修改。 Spark不支持在运行时修改配置。

© www.soinside.com 2019 - 2024. All rights reserved.