У меня есть 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"
}
, когда я читаю это в искре, столбец данных читается как String, поэтому мне нужно проанализировать и сделать столбцы, как показано ниже, Здесь каждая строканужно преобразовать в несколько строк
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"))
, но с помощью логики я могу получитьтолько одна строка, я хочу, чтобы это преобразовало два числа строк в соответствии с моими полями данных