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()