Spark写入MongoDB报错:com.mongodb.ConnectionString类未找到问题求助
故障原因
- 核心问题为版本不兼容:你使用的
mongo-spark-connector 2.11-2.3.0依赖MongoDB Java Driver 3.6.0及以上版本,而你当前引入的MongoDB Java Driver 2.7版本过老,不存在com.mongodb.ConnectionString类,触发类加载失败异常。 - 额外问题:MongoDB Java Driver 2.x系列的API设计和3.x系列完全不兼容,既无法适配新版Mongo Spark Connector的调用逻辑,也无法兼容你使用的MongoDB 4.0.16版本。
解决方案
- 替换MongoDB Java Driver版本
将现有2.7版本的MongoDB Java Driver替换为3.6.0~3.12.x之间的兼容版本,3.12.x是长期支持版本,同时兼容MongoDB 4.0+和Spark Connector 2.3.0。以Maven依赖为例:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.14</version> </dependency>
如果是Gradle配置:
implementation 'org.mongodb:mongo-java-driver:3.12.14'
- 排除旧版本依赖冲突
检查项目依赖树,排除其他依赖间接引入的旧版MongoDB Java Driver。以Maven为例,在引入冲突依赖时添加exclusions配置:
<dependency> <groupId>冲突依赖的groupId</groupId> <artifactId>冲突依赖的artifactId</artifactId> <version>冲突依赖版本</version> <exclusions> <exclusion> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> </exclusion> </exclusions> </dependency>
验证依赖生效
在IntelliJ的Maven/Gradle面板查看依赖树,确认全局只有3.x版本的MongoDB Java Driver,无2.7版本残留后重新打包运行即可。可选连接配置补充
如果替换驱动后仍有连接异常,可在SparkSession初始化时显式声明Mongo连接配置:
SparkSession spark = SparkSession.builder() .appName("MongoWriteTest") .config("spark.mongodb.input.uri", "mongodb://<你的连接地址>/<数据库名>.periodos") .config("spark.mongodb.output.uri", "mongodb://<你的连接地址>/<数据库名>.periodos") .getOrCreate();
内容的提问来源于stack exchange,提问作者Rarm
相关产品推荐
相关产品推荐

