Databricks加载数据湖CDM数据报NoClassDefFoundError错误如何处理?
报错根因
java.lang.NoClassDefFoundError: org/apache/spark/sql/sources/v2/ReadSupport 报错由两个核心问题导致:
- 依赖版本不兼容:你安装的
com.microsoft.azure:spark-cdm-connector:0.19.1仅适配Spark 2.4.x版本,其调用的DataSource V2 API是Spark 2.4的旧版本定义。而Databricks 7.6内置Spark 3.0.1,Spark 3.x对DataSource V2 API做了不兼容改造,移除了旧版ReadSupport类的对应路径。 - 重复依赖冲突:你同时安装了同名功能的本地JAR包和Maven依赖,两类依赖的类加载顺序不同,极易引发类加载异常。
解决步骤
1. 清理现有冲突依赖
先删除集群中已安装的以下依赖:
- 本地JAR包:
spark_cdm_connector_0_19_1.jar、neo4j_connector_apache_spark_2_12_4_0_1_for_spark_3.jar - Maven依赖:
com.microsoft.azure:spark-cdm-connector:0.19.1
2. 安装适配Spark 3.0的CDM连接器
直接在集群的Maven依赖库中添加适配Spark 3.x版本的CDM连接器坐标即可:com.microsoft.azure:spark-cdm-connector:3.0
该版本原生兼容Spark 3.0.x与Scala 2.12,和你的Databricks 7.6集群版本完全匹配
3. 可选配置调整
如果替换依赖后仍然报错,可在集群配置的Spark参数栏添加以下兼容配置:
spark.sql.legacy.dataSourceV2.enabled true
该参数会开启Spark 3.x对旧版DataSource V2 API的兼容支持。
4. Neo4j依赖适配
你使用的neo4j-contrib:neo4j-connector-apache-spark_2.12:4.0.1_for_spark_3本身原生适配Spark 3.x,清理重复的本地JAR包后保留该Maven依赖即可,不会和新版CDM连接器产生冲突。
内容的提问来源于stack exchange,提问作者Karuna
相关产品推荐
相关产品推荐

