You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark newSession()是否继承父会话配置?SQLConf与SparkContext解析

Spark中newSession()的配置继承规则与SQLConf、SparkContext区别解析

核心结论

使用newSession()创建的新SparkSession不会继承父会话的动态配置(通过conf.set()设置)以及Builder阶段的SQL专属配置,但会共享SparkContext层面的全局配置、SparkContext实例本身,以及表缓存。

SQLConf与SparkContext的本质区别

  • SparkContext:是整个Spark应用的核心全局上下文,负责管理应用的底层资源(集群连接、任务调度、内存/CPU分配等)。它的配置是全局生效的,所有会话共享,比如spark.executor.cores、spark.driver.memory这类资源相关配置,一旦设置就对整个应用内的所有会话有效,无法在单个会话中单独修改。
  • SQLConf:是每个SparkSession专属的配置容器,专门管理SQL查询相关的会话级行为配置,比如spark.sql.shuffle.partitions、spark.sql.sources.default这类仅影响SQL执行逻辑的参数。每个SparkSession拥有独立的SQLConf实例,修改某一个会话的SQLConf不会对其他会话产生影响。

结合测试结果解析

你的Databricks测试结果完全符合上述规则:

  1. Session-1:通过Builder设置spark.sql.sources.default(SQL专属配置),又通过conf.set()设置spark.sql.shuffle.partitions(动态SQL会话配置),这两个配置都存储在Session-1的独立SQLConf中。
  2. Session-2:通过newSession()创建后,会生成全新的SQLConf实例,默认加载系统/集群的默认配置(spark.sql.sources.default为delta、spark.sql.shuffle.partitions为200),不会继承Session-1的SQLConf配置。
  3. Session-3:修改自身的spark.sql.shuffle.partitions为333,仅对Session-3的SQLConf生效,不会影响Session-1或Session-2的配置,进一步验证了SQLConf的独立性。

补充:哪些内容会被新会话共享?

  • SparkContext实例:所有由newSession()创建的会话共享同一个SparkContext,因此资源类全局配置在所有会话中保持一致。
  • 表缓存:如果父会话中缓存了表(如spark_session_1.cacheTable("my_table")),新会话可以直接读取缓存数据,无需重新计算,因为表缓存是绑定在SparkContext上的全局资源。

内容的提问来源于stack exchange,提问作者user16798185

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:43:15