我使用官方的mongo spark连接器。
在我的数据库中,我有一个管理员具有root角色,所以他没事。
我创建了一个配置如下:
val readConfig = ReadConfig(Map("spark.mongodb.auth.uri" -> "mongodb://<userName>:<password>@<ip>:27017/admin",
"spark.mongodb.input.uri" -> "mongodb://<ip>:27017/MyDatabase.myCollection"))
但是当我尝试读取某些数据时,我收到错误“未授权执行命令。”
我不明白为什么我的root用户没有被授权。
答案 0 :(得分:6)
因为@(await Component.InvokeAsync("NameViewComponent", "some name"))
@(await Component.InvokeAsync("NameViewComponent", "some name1"))
@(await Component.InvokeAsync("NameViewComponent", "some name2"))
//etc...
不是配置设置。
由于输入uri没有认证参数,因此未授权读取。
尝试:
"spark.mongodb.auth.uri"
或:
val readConfig = ReadConfig(Map(
"uri" -> "mongodb://<userName>:<password>@<ip>:27017/myDatabase.myCollection?authSource=admin"))
答案 1 :(得分:1)
要避免进行全面扫描,可以执行以下操作:
val rdd = MongoSpark.load(sc)
val aggregatedRdd = rdd.withPipeline(Seq(Document.parse("{ $match: { test : { $gt : 5 } } }")))
println(aggregatedRdd.count)
println(aggregatedRdd.first.toJson)
答案 2 :(得分:0)
Find below implementation for Spark SQL Mongo Spark connector for admin DB having authentication:
1] Mongo uri:- mongodb://userid:pw@ip:port
2] sparkSessionCtx = SparkSession
.builder()
.appName(appName)
.config("spark.mongodb.input.uri", uri+ "/" + dbName + "." + collName+ "?authSource=admin")
.config("spark.mongodb.output.uri", uri+ "/" + dbName + "." + collName+ "?authSource=admin")
.getOrCreate()
3] val readConfiguration = ReadConfig(Map("database" -> dbName, "collection" -> collectionName, "readPreference.name" -> "primaryPreferred" ), Some(ReadConfig(sparkSessionCtx)))
mongodataframe = MongoSpark.load(sparkSessionCtx , readConfiguration)