【问题标题】:Spark Scala - How to construct Scala Map from nested JSON?Spark Scala - 如何从嵌套的 JSON 构造 Scala Map?
【发布时间】:2019-05-29 15:33:49
【问题描述】:

我有一个带有嵌套字段的嵌套 json 数据,我想提取并构建一个 Scala 映射。

这里是示例 JSON:

"nested_field": [
  {
    "airport": "sfo",
    "score": 1.0
  },
  {
    "airport": "phx",
    "score": 1.0
  },
  {
    "airport": "sjc",
    "score": 1.0
  }
]

我想使用saveToES() 并构造一个Scala Map 将字段索引到ES 索引中,映射如下:

 "nested_field": {
    "properties": {
      "score": {
        "type": "double"
      },
      "airport": {
        "type": "keyword",
        "ignore_above": 1024
      }
    }
  }

使用 spark.read.json("example.json") 将 json 文件读入数据帧。在这种情况下,构建 Scala Map 的正确方法是什么?

感谢您的帮助!

【问题讨论】:

  • 你的问题不清楚。您需要将其读取为 scala json 对象并对其进行映射或转换吗?
  • 我想知道如何在scala中创建地图对象的地图,谢谢!
  • 请检查以下答案是否符合您的需要。您还可以添加其他复杂的规则。如果您需要发布另一个示例。

标签: scala apache-spark elasticsearch-hadoop


【解决方案1】:

您可以使用下面的示例代码来做到这一点

import org.json4s.DefaultFormats
import org.json4s.jackson.JsonMethods.parse



  case class AirPortScores(airport: String, score: Double)
  case class JsonRulesHandler(airports: List[AirPortScores])

  val jsonString: String = """{"airports":[{"airport":"sfo","score":1},{"airport":"phx","score":1},{"airport":"sjc","score":1}]}"""

  def loadJsonString(JsonString: String): JsonRulesHandler = {
  implicit val formats: DefaultFormats.type = org.json4s.DefaultFormats
  parse(JsonString).extract[JsonRulesHandler]
}

val parsedJson: JsonRulesHandler = loadJsonString(jsonString)
parsedJson.airports.foreach(println)//you can select parsedJson.airport or scores
//below ouput
AirPortScores(sfo,1.0)
AirPortScores(phx,1.0)
AirPortScores(sjc,1.0)

【讨论】:

  • 谢谢,我认为这会有所帮助!
猜你喜欢
  • 2018-09-12
  • 1970-01-01
  • 2016-07-19
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多