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

PySpark写入Delta报错ClassNotFoundException: delta.DefaultSource

报错根因

这个java.lang.ClassNotFoundException: delta.DefaultSource报错核心是两类问题导致的:

  1. 版本不兼容:你当前使用的Spark版本是3.2.1,但配置中引入的Delta依赖是io.delta:delta-core_2.12:0.7.0,该版本仅适配Spark 3.0及更早版本,和Spark 3.2完全不兼容,运行时自然找不到Delta数据源的实现类。
  2. 依赖未实际加载:Jupyter Notebook环境下,如果在执行创建SparkSession的代码前,已经有其他操作提前初始化了Spark上下文,那么代码中写的spark.jars.packages配置不会生效,Delta依赖包根本没有被拉取加载到执行环境中,也会触发类找不到的错误。
排查与修复步骤
  • 第一步先替换适配的Delta版本:Spark 3.2.x对应兼容的Delta版本为2.0.x,直接将依赖配置修改为io.delta:delta-core_2.12:2.0.1即可,不要使用0.7.0这类过旧的版本。修正后的核心代码参考:
from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .master("local[*]") \
    .appName('test') \
    .config("spark.jars.packages", "io.delta:delta-core_2.12:2.0.1") \
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
    .config('spark.ui.port', '4050') \
    .getOrCreate()
df = spark.read.format('parquet').load('fhvhv_tripdata_2021-01.parquet')
df.write.format('delta').save('deltafiles')
  • 如果替换版本后仍报错,先执行print(spark.sparkContext.getConf().getAll())打印当前所有生效的Spark配置,确认spark.jars.packages配置项的值确实是你设置的正确Delta依赖,没有被全局环境变量或其他预配置覆盖。
  • 检查是否存在提前初始化Spark的问题:重启Jupyter内核后,直接运行创建SparkSession的代码块,不要先执行其他会触发PySpark初始化的操作,避免自定义的依赖配置失效。
  • 如果是网络原因导致Maven无法自动拉取Delta依赖,可以手动下载对应版本的delta-core jar包到本地,通过spark.jars配置指定本地jar的绝对路径,绕过自动拉取的流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:42:22