【问题标题】:Merging configurations for spark using typesafe library and extraJavaOptions使用类型安全库和 extraJavaOptions 合并 spark 的配置
【发布时间】:2020-04-24 11:27:37
【问题描述】:

我正在尝试使用

合并 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")))

我正在使用 spark-submit ....... --conf spark.driver.extraJavaOptions=-Dconfig.resource=./reference.conf,-Duser.resource=./user.conf ... 在 spark 中定义我的 java 变量

我的目标是能够在我的代码中指向一个不在我的 jar 中的文件供 System.getProperty("..") 使用。我更改了用于测试的文件夹 (cd ..) 并不断收到相同的错误,所以我猜 spark 不关心我的 java 参数..?

有没有办法指向一个文件(在我的情况下甚至是 2 个文件)以便它们可以合并?

我还尝试包含 reference.conf 文件但不包含 user.conf 文件:它识别 reference.conf 但不识别我使用 --conf spark.driver.extraJavaOptions=-Duser.resource=./user.conf 提供的 user.conf。

有没有办法做到这一点?感谢您的帮助

【问题讨论】:

    标签: scala apache-spark merge typesafe


    【解决方案1】:

    我没有看到您在使用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() 已经包含类路径和 -d 参数中的属性文件中存在的所有属性。我优先考虑我的外部“application.conf”并使用默认值。对于匹配键,“application.conf”优先于其他来源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-06
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2014-04-27
      • 1970-01-01
      相关资源
      最近更新 更多