运行配置Delta的PySpark代码报Spark Context停止驱动重启错误如何解决?
错误产生原因
- 主动终止Spark上下文:若代码在Notebook环境运行,你手动调用
spark_sess.stop()会终止Notebook默认绑定的SparkContext,平台检测到上下文丢失后会触发Driver重启,抛出该错误。 - Delta依赖缺失:代码中配置了Delta Lake的SQL扩展和Catalog,但是运行环境没有对应版本的Delta依赖包,Spark初始化时加载类失败,直接导致SparkContext崩溃退出。
- 版本不兼容:Delta Lake版本与当前Spark版本不匹配,触发类加载冲突、方法不存在等错误,导致Driver进程崩溃。
- Driver资源不足:Driver分配的内存、CPU等资源达到上限,被集群资源管理器主动Kill,导致SparkContext停止。
排查步骤
- 先确认运行环境:如果是在Notebook中执行代码,先检查是否存在主动调用
spark.stop()的逻辑,Notebook环境默认会自动管理SparkSession生命周期,不需要手动停止。 - 核对依赖情况:执行
spark.sparkContext.listJars()查看运行时的Jar包列表,确认是否存在io.delta开头的Delta相关依赖。 - 校验版本匹配:确认当前Spark版本与Delta版本的对应关系,官方匹配规则为:Spark 3.2.x对应Delta 1.2.x、Spark 3.3.x对应Delta 2.2.x、Spark 3.4.x对应Delta 2.4.x、Spark 3.5.x对应Delta 3.0.x及以上。
- 查看Driver日志:拉取Driver进程的完整运行日志,排查是否存在
ClassNotFoundException、OutOfMemoryError等明确的错误堆栈。
修复方案
- 若为Notebook环境运行:直接删除代码末尾的
spark_sess.stop()行即可,不需要手动终止SparkSession。 - 补充Delta依赖:本地运行时启动PySpark添加参数
--packages io.delta:delta-core_2.12:<对应Delta版本号>;集群提交任务时在Spark配置中添加spark.jars.packages参数指定Delta依赖坐标,或者提前将Delta Jar包放入集群ClassPath。 - 对齐版本:根据Spark版本调整Delta依赖的版本,保证两者兼容。
- 调大Driver资源:若日志提示内存溢出,初始化SparkSession时添加配置
.config("spark.driver.memory", "4g"),根据实际业务需求调整内存大小。
内容的提问来源于stack exchange,提问作者user7422128
相关产品推荐
相关产品推荐

