我有下面的JSON结构,我试图将每个元素转换为一个结构,如下所示使用Spark SQL。爆炸(控制)不起作用。有人可以建议一种方法吗?
输入:
{
"control" : [
{
"controlIndex": 0,
"customerValue": 100.0,
"guid": "abcd",
"defaultValue": 50.0,
"type": "discrete"
},
{
"controlIndex": 1,
"customerValue": 50.0,
"guid": "pqrs",
"defaultValue": 50.0,
"type": "discrete"
}
]
}
期望的输出:
controlIndex customerValue guid defaultValult type
0 100.0 abcd 50.0 discrete
1 50.0 pqrs 50.0 discrete
答案 0 :(得分:2)
除了Paul Leclercq的答案,这是可行的方法。
import org.apache.spark.sql.functions.explode
df.select(explode($"control").as("control")).select("control.*")
答案 1 :(得分:1)
爆炸将为给定数组或地图列中的每个元素创建一个新行
import org.apache.spark.sql.functions.explode
df.select(
explode($"control")
)
答案 2 :(得分:0)
爆炸在这里不起作用,因为它不是普通的数组列,而是结构数组。你可能想尝试像
这样的东西 df.select(col("control.controlIndex"), col("control.customerValue"), col ("control. guid"), col("control. defaultValue"), col(control. type))