Объединение конфигураций для spark с использованием библиотеки typesafe и extraJavaOptions - PullRequest
3 голосов
/ 07 января 2020

Я пытаюсь объединить 2 файла конфигурации (или создать файл конфигурации на основе одного ссылочного файла), используя

  lazy val finalConfig:
    Option(System.getProperty("user.resource"))
      .map(ConfigFactory.load)
      .map(_.withFallback(ConfigFactory.load(System.getProperty("config.resource"))).resolve())
      .getOrElse(ConfigFactory.load(System.getProperty("config.resource")))

Я определяю свою переменную java внутри spark, используя spark-submit ....... --conf spark.driver.extraJavaOptions=-Dconfig.resource=./reference.conf,-Duser.resource=./user.conf ...

Моя цель - иметь возможность указать файл, который не находится внутри моего фляги, который будет использоваться System.getProperty ("..") в моем коде. Я изменил папку для тестирования (cd ..) и продолжаю получать ту же ошибку, так что я думаю, что spark не заботится о моих java аргументах ..?

Есть ли способ указать на файл ( или даже 2 файла в моем случае) чтобы их можно было объединить?

Я также попытался включить файл reference.conf, но не файл user.conf: он распознает reference.conf, но не user.conf, который я дал с помощью --conf spark.driver.extraJavaOptions=-Duser.resource=./user.conf.

Есть способ сделать это? Спасибо, если вы можете помочь

1 Ответ

1 голос
/ 08 января 2020

Я не вижу, как вы делаете ConfigFactory.parseFile для загрузки файла, содержащего свойства.

Typesafe автоматически читает любой файл .properties в пути к классам, все параметры -D передаются в JVM, а затем объединяют их.

Я читаю файл внешних свойств, который не является частью jar, как показано ниже. Файл «application.conf» находится в том же каталоге, где хранится jar.

    val applicationRootPath = System.getProperty("user.dir")
    val config = Try {
      ConfigFactory.parseFile(new File(applicationRootPath + "/" + "application.conf"))
    }.getOrElse(ConfigFactory.empty())

    appConfig = config.withFallback(ConfigFactory.load()).resolve

ConfigFactory.load() уже содержит все свойства, присутствующие в файлах свойств в параметрах path class и -d. Я отдаю приоритет моему внешнему «application.conf» и возвращаюсь к значениям по умолчанию. Для соответствующих ключей «application.conf» имеет приоритет над другими источниками.

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