Databricks同Notebook中Scala与Python的Spark Session及临时视图共享问题
Databricks Notebook混编Scala与Python的Spark Session及资源共享问题
1. Spark Session的数量
在Databricks同一个Notebook中混用Scala和Python时,会创建两个独立的Spark Session实例:
- Scala的Session直接运行在JVM环境中,是原生的Spark Session实现;
- Python的Session是PySpark通过Py4J桥接层创建的,本质是对JVM端Session的封装,但属于Python runtime绑定的独立实例。
不过默认配置下,两个Session会共享同一个底层SparkContext,保证集群资源的统一调度。
2. 临时视图与变量的共享差异原因
临时视图可跨语言共享
临时视图(含全局临时视图)的元数据存储在Spark应用级别的Catalog服务中,这个Catalog是整个Spark应用的共享元数据组件。不管是Scala还是Python的Session,都会连接同一个Catalog读取视图的逻辑定义,因此能跨语言访问到视图。另外,视图本身只是查询逻辑的封装,实际数据存储在分布式集群中,不依赖语言环境,这也保证了跨语言访问的可行性。
变量无法跨语言共享
- 语言运行时隔离:Scala变量存储在JVM内存中,Python变量存储在Python解释器的进程内存中,两者属于完全独立的运行环境,没有直接的内存共享机制。
- 通信机制限制:PySpark通过Py4J实现JVM与Python进程的通信,但这种通信仅针对Spark API的方法调用,不会自动同步本地变量。普通本地变量(如Python的
list、Scala的var)不属于Spark分布式数据集范畴,不会被同步到另一语言的运行环境中。
内容的提问来源于stack exchange,提问作者Programmer
相关产品推荐
相关产品推荐

