Spark Scala - проанализировать JSON из столбца данных и вернуть RDD со столбцами

У меня есть sparkScala RDD это выглядит так:

df.printSchema()

 |-- stock._id: string (nullable = true)
 |-- stock.value: string (nullable = true)

Второй столбец RDD является вложенным JSON:

[ { ""warehouse"" : ""Type1"" , ""amount"" : ""0.0"" }, { ""warehouse"" : ""Type1"" , ""amount"" : ""25.0"" }]

Мне нужно сгенерировать RDD который будет содержать существующие два столбца, но также столбцы из JSON лайк:

_id, value , warehouse , amount

Я пытался сделать это с помощью пользовательских функций, но я пытаюсь применить эту функцию к моему RDD и получить нужный результат

import org.json4s.jackson.JsonMethods._

import org.json4s._

 def extractWarehouses (value: String)  {
    val json = parse(value)
    for {
      JObject(warehouses) <- json
      JField("warehouse", JString(warehouse)) <- warehouses
      JField("amount", JDouble(amount)) <- warehouses
    } yield (warehouse, amount)
  }

1 ответ

Как вы сказали value это массив json, который содержит список объектов json, вам нужно разобрать его и получить отдельные свойства в виде столбцов, как показано ниже:

import org.apache.spark.sql.functions

val flattenedDF = df.select(functions.column("_id"), functions.explode(df("value")).as("value"))
val result = flattenedDF.select("_id", "value.warehouse", "value.amount")
result.printSchema()
Другие вопросы по тегам