sparksession.config() 和 spark.conf.set() 有什么区别

XIN*_*XIN 4 apache-spark pyspark

我尝试使用两种方式来设置spark.dynamicAllocation.minExecutors,但似乎只有第一种方式有效

spark2 = SparkSession \
  .builder \
  .appName("test") \
  .config("spark.dynamicAllocation.minExecutors", 15) \
  .getOrCreate()
Run Code Online (Sandbox Code Playgroud)

对比

spark2.conf.set("spark.dynamicAllocation.minExecutors", 15)
Run Code Online (Sandbox Code Playgroud)

zer*_*323 7

与其说是方法之间的差异,不如说是执行这些方法的上下文的差异。

  • pyspark.sql.session.SparkSession.Builder选项可以在 Spark 应用程序启动之前执行。这意味着,如果没有SparkSession要检索的活动,仍然可以设置一些特定于集群的选项。

    如果会话已经初始化,设置新的配置选项可能不起作用。例如,参见Spark 2.0: Redefining SparkSession params through GetOrCreate and NOT see changes in WebUI

  • pyspark.sql.conf.RuntimeConfig只能从退出会话中检索,因此set一旦集群运行,就会调用其方法。此时,大多数特定于集群的选项被冻结且无法修改。

一般RuntimeConfig.set用于修改spark.sql.*配置参数,通常可以在运行时更改。

请注意,根据部署模式,某些选项(尤其是spark.*.extraJavaOptions)无法使用任何这些方法设置,只能通过spark-submit参数或使用配置文件进行修改。


小智 0

一些配置属性需要在 SparkSession 启动之前设置才能工作。Sparksession 在初始化时使用它们。如果您在创建sparksession之后设置spark.dynamicAllocation.minExecutors,sparConf对象中该属性的值仍然会发生变化,您可以通过打印该属性来验证这一点,但它不会影响sparksession会话,因为它采用了该值在初始化时存在。