Spark Sql - объем памяти mongoDb превышает лимит.Как использовать 'allowDiskUse' в Spark - PullRequest
0 голосов
/ 06 июня 2019

Я боролся с одной проблемой, связанной с ограничениями выполнения запросов Spark mongo. Ниже приведен запрос, который я передаю в mongoDB из Spark, и результат сохраняется в dataframe. Но приложение выдает ошибку с сортировкой, превышающей лимит памяти (пример кода и полная ошибка приведены ниже). Я могу использовать опцию allowDiskUse: true, когда выполняю запрос в оболочке mongo, но не могу найти способ передать эту опцию из Spark.

Я думал об увеличении лимита памяти на mongoDB, но этапы конвейера агрегации ограничены 100 МБ, и это не настраивается (ответ от команды поддержки mongoDB), поэтому я ничего не могу сделать на стороне mongoDB.

Каждый документ в коллекции - это большой вложенный документ json (размер каждого документа <= 2 МБ). Я выровняю документ, как только получу результат от Монго. Также я не отправляю в запросе ни одной команды сортировки, но механизм монго, кажется, выполняет сортировку во время выполнения запроса. </p>

val ruleAssgnMatchQuery = """[{ $match: {"category":"abc","archive_flag": 
                              false, "general.active_flag":true} } ] """
  val ruleAssgnDf = spark.read.format("com.mongodb.spark.sql.DefaultSource")
          .option("spark.mongodb.input.uri", DSSConnectionURI)
          .option("spark.mongodb.input.collection", ruleAssgnCollName)
          .option("pipeline",ruleAssgnMatchQuery)
          .load()

Вот ошибка. Я использую Spark - 2.3.1, монго-спарк-разъем - 2.4.0 com.mongodb.MongoCommandException: команда завершилась с ошибкой 16820 (Location16820): 'Сортировка превысила ограничение памяти 104857600 байт, но не включила внешнюю сортировку. Отмена операции. Pass allowDiskUse: true, чтобы включить. ' на сервере 172.16.1.26:27017. Полный ответ: {"ok": 0.0, "errmsg": "Сортировка превысила ограничение памяти в 104857600 байт, но не включила внешнюю сортировку. Операция прерывания. Передайте allowDiskUse: true для выбора.", "Code": 16820, "codeName": "Location16820"}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...