MongoDB Spark Connector 10.1.1报ConfigException:缺失database配置
解决Mongo Spark Connector 10.1.1读取数据时的"Missing configuration for: database"错误
问题原因
Mongo Spark Connector 10.x系列(适配Spark 3.x)采用了Spark DataSource V2 API,旧版本的MongoSpark类已被废弃,同时配置解析逻辑与旧版本存在差异。你遇到的错误是因为连接器无法正确识别数据库配置,即使URI中包含数据库名或单独配置了spark.mongodb.input.database,也可能因配置优先级或解析逻辑问题导致识别失败。
解决方案
以下是几种可靠的解决方式,按推荐程度排序:
方案1:读取时直接指定所有必要配置(最推荐)
在read()方法中直接通过option()传递URI、数据库和集合信息,避免SparkSession配置的优先级问题:
// 方式1:URI直接包含数据库和集合 Dataset<Row> dataset = spark.read() .format("mongodb") .option("uri", "mongodb://user:password@localhost:27017/test_db.ExampleCollection") .load(); // 方式2:分开指定URI、数据库、集合 Dataset<Row> dataset = spark.read() .format("mongodb") .option("uri", "mongodb://user:password@localhost:27017/") .option("database", "test_db") .option("collection", "ExampleCollection") .load();
方案2:修正SparkSession的配置项
如果仍希望在SparkSession中统一配置,需确保配置键符合新版本要求,可使用统一的spark.mongodb.uri(同时作用于输入输出),或明确拆分数据库和集合配置:
// 配置方式1:URI包含数据库,指定集合 SparkSession spark = SparkSession.builder() .master("local") .appName("ExampleApp") .config("spark.mongodb.uri", "mongodb://user:password@localhost:27017/test_db") .config("spark.mongodb.input.collection", "ExampleCollection") .getOrCreate(); // 读取数据 Dataset<Row> dataset = spark.read().format("mongodb").load();
// 配置方式2:URI仅包含地址,单独指定数据库和集合 SparkSession spark = SparkSession.builder() .master("local") .appName("ExampleApp") .config("spark.mongodb.uri", "mongodb://user:password@localhost:27017/") .config("spark.mongodb.input.database", "test_db") .config("spark.mongodb.input.collection", "ExampleCollection") .getOrCreate(); // 读取数据 Dataset<Row> dataset = spark.read().format("mongodb").load();
关键说明
- 10.x版本连接器不再依赖
MongoSpark类,直接使用spark.read().format("mongodb")即可操作数据。 - 避免混合使用
spark.mongodb.input.uri和spark.mongodb.input.database,优先使用统一的spark.mongodb.uri或在读取时直接指定选项,减少配置冲突。
内容的提问来源于stack exchange,提问作者nick_j_white
相关产品推荐
相关产品推荐

