繁体   English   中英

Spark scala - 从数据帧列解析 json 并返回带有列的 RDD

[英]Spark scala - parse json from dataframe column and return RDD with columns

我有一个看起来像这样的 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)
  }

正如您所说, 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM