Spark运行Delta Lake报V2TableWithV1Fallback类未找到错误如何解决
错误根因
该报错的核心原因是Spark运行版本与Delta版本不兼容:
你虽然通过pip安装了pyspark 3.1.2,但findspark.init()强制指定了路径为/home/ole/spark-3.0.3-bin-hadoop3.2的Spark 3.0.3作为运行环境。而Delta 1.0.0仅适配Spark 3.1.x版本,Spark 3.0.x内核中不存在报错里缺失的org/apache/spark/sql/connector/catalog/V2TableWithV1Fallback类,因此触发类找不到异常。
此外你代码中存在重复赋值的笔误:spark = spark = configure_spark_with_delta_pip(builder).getOrCreate(),虽不影响运行但建议修正。
修复方案
二选一即可:
- 方案1:继续使用本地Spark 3.0.3环境,降级Delta到兼容版本
执行命令pip3 install delta-spark==0.8.0,Delta 0.8.0是适配Spark 3.0.x的官方版本。 - 方案2:继续使用Delta 1.0.0,修正Spark运行版本
修改findspark初始化逻辑,要么指向你本地Spark 3.1.2的实际安装路径,要么删除路径参数让findspark自动调用pip安装的pyspark 3.1.2,对应修改为:findspark.init()
修复后验证代码
import findspark # 无参数默认读取pip安装的pyspark,若用本地Spark3.1.2可填对应安装路径 findspark.init() from pyspark.sql import SparkSession from delta import * builder = SparkSession.builder.appName("MyApp") \ .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \ .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") spark = configure_spark_with_delta_pip(builder).getOrCreate() # 写入测试 data = spark.range(0,5) data.write.format("delta").save("/tmp/delta-table") # 读取验证 df = spark.read.format("delta").load("/tmp/delta-table") df.show()
内容的提问来源于stack exchange,提问作者OMA
相关产品推荐
相关产品推荐

