Spark SQL爆炸结构数组

时间:2017-10-17 15:42:56

标签: apache-spark-sql

我有下面的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

3 个答案:

答案 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))