【问题标题】:Scala changing parquet path in config (typesafe)Scala 在配置中更改镶木地板路径(类型安全)
【发布时间】:2021-03-20 18:33:02
【问题描述】:

目前我有一个这样的配置文件:

project {
  inputs {
    baseFile {
      paths = ["project/src/test/resources/inputs/parquet1/date=2020-11-01/"]
      type = parquet
      applyConversions = false
    }
  }
}

我想在运行时将日期“2020-11-01”更改为另一个日期。我读到我需要一个新的配置对象,因为它是不可变的,我正在尝试这个,但我不太确定如何编辑路径,因为它是一个列表而不是一个字符串,它肯定需要是一个列表,否则它会说我还没有为镶木地板配置路径。

val newConfig = config.withValue("project.inputs.baseFile.paths"(0),
        ConfigValueFactory.fromAnyRef("project/src/test/resources/inputs/parquet1/date=2020-10-01/"))

但我得到了一个:

Error com.typesafe.config.ConfigException$BadPath: path parameter: Invalid path 'project.inputs.baseFile.': path has a leading, trailing, or two adjacent period '.' (use quoted "" empty string if you want an empty element)

设置新路径的正确方法是什么?

【问题讨论】:

    标签: scala typesafe typesafe-config hocon


    【解决方案1】:

    你有一个选择,是覆盖整个数组:

    import scala.collection.JavaConverters._
    val mergedConfig = config.withValue("project.inputs.baseFile.paths",
                          ConfigValueFactory.fromAnyRef(Seq("project/src/test/resources/inputs/parquet1/date=2020-10-01/").asJava))
    

    但一种更优雅的方法(恕我直言)是创建一个新的config,并将现有的用作后备。

    例如,我们可以新建一个config

    val newJsonString = """project {
                       |inputs {
                       |baseFile {
                       |  paths = ["project/src/test/resources/inputs/parquet1/date=2020-10-01/"]
                       |}}}""".stripMargin
    
    val newConfig = ConfigFactory.parseString(newJsonString)
    

    现在合并它们:

    val mergedConfig = newConfig.withFallback(config)
    

    输出:

    println(mergedConfig.getList("project.inputs.baseFile.paths"))
    println(mergedConfig.getString("project.inputs.baseFile.type"))
    

    是:

    SimpleConfigList(["project/src/test/resources/inputs/parquet1/date=2020-10-01/"])
    parquet
    

    正如预期的那样。

    您可以阅读有关Merging config trees 的更多信息。代码在Scastie 运行。

    我没有找到任何方法将数组的一个元素替换为withValue

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 1970-01-01
      • 2022-01-19
      • 2019-04-17
      • 2021-01-30
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多