Ошибка раздела mongodb для авторизации на уровне базы данных "не авторизован на <dbname>для выполнения команды {splitVector:" - PullRequest
0 голосов
/ 03 сентября 2018

У меня авторизация включена на уровне базы данных (поэтому для чтения базы данных необходимо указать имя пользователя и пароль, а не входить в mongodb), и я пытаюсь прочитать данные из коллекцию mongodb в RDD с использованием MongoSpark.load ().

Я указал readConfig как:

val readConfig = ReadConfig(Map("spark.mongodb.input.uri" ->
  "mongodb://<username>:<password>@<mongo-host>:<mongo-port = 27017>/<db-name>.<collection-name>",
  "spark.mongodb.input.partitioner" -> "MongoSplitVectorPartitioner"))

Я прочитал СДР и отфильтровал его по предопределенному столбцу как:

val rdd = MongoSpark.load(sc, readConfig).withPipeline(Seq(Document.parse("{ $match: {\"isSatisfyingCondition\" :{$eq: true} } }"))).toDf

val processedRdd = rdd.select("_id", "col1").collect()

Я получаю следующую ошибку в строке processingRdd из-за действия collect ():

User class threw exception: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on <db-name> to execute command { splitVector: "<db-name>.<collection-name>",

Моя интуиция заключается в том, что я не передаю имя пользователя и пароль явно разделителю и должен это делать, чтобы он мог обращаться к базе данных / читать ее.

Как передать имя пользователя и пароль, чтобы разрешить их использование в базе данных? Или я вообще смотрю не туда и причина этой ошибки другая? Этот пользователь не является администратором. Я могу подключиться к базе данных из командной строки, используя следующую команду:

mongo <db-name> --host <mongo-host>:<mongo-port> --username <username> --password <password>

ОБНОВЛЕНИЕ (вопрос все еще не решен): Когда я удаляю разделитель из readConfig, ошибки нет. Может ли кто-нибудь объяснить, как указание разделителя в readConfig связано с этой ошибкой?

После удаления разделителя readConfig теперь читает:

val readConfig = ReadConfig(Map("spark.mongodb.input.uri" ->
  "mongodb://<username>:<password>@<mongo-host>:<mongo-port = 27017>/<db-name>.<collection-name>"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...