【发布时间】:2018-10-03 21:48:51
【问题描述】:
我有下面这样的 json,这只是数据的一部分。所以实际压缩的 json 如果这些数据有很多
{
"filed1": "value1",
"filed2": "value2",
"data":"{\"info\":[{\"type\":[\"Extra\"],\"value\":9},{\"type\":[\"Free\"],\"value\":8},{\"type\":[\"Actual\"],\"value\":100}]}",
"code": "0000"
}
{
"filed1": "value3",
"filed2": "value4",
"data":"{\"info\":[{\"type\":[\"Extra\"],\"value\":1001}]}",
"code": "0001"
}
{
"filed1": "value5",
"filed2": "value6",
"data":"{\"info\":[{\"type\":[\"Actual\"],\"value\":90},{\"type\":[\"Free\"],\"value\":80}]}",
"code": "0003"
}
当我在 spark 中读取数据列时,数据列被读取为字符串,所以我需要解析并制作如下所示的列,这里每一行都需要转换为多行
filed1 filed2 code type Value
value1 value2 0000 Extra 9
value1 value2 0000 Free 8
value1 value2 0000 Actual 100
value3 value4 0001 Extra 1001
value5 value6 0003 Actual 90
value5 value6 0003 Free 80
我在 udfs 下面写了,但我不知道如何为输入的单行创建多行
val getTypeName = udf((strs:String) => {
// parse json and return types
})
val getValue = udf((strs:String) => {
// parse json and return values
})
val df = spark.read.json("<pathtojson">)
val df1 = df.withColumn("type", getTypeName("data")).withColumn("value", getValue("data"))
但是通过逻辑我只能得到单行,我希望它根据我的数据字段转换两个行数
【问题讨论】:
标签: scala apache-spark apache-spark-sql