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

除了Paul Leclercq的答案之外,以下是可以工作的方法。

import org.apache.spark.sql.functions.explode   
df.select(explode($"control").as("control")).select("control.*")

Explode 将为给定数组或映射列中的每个元素创建一个新行

import org.apache.spark.sql.functions.explode   
df.select(
  explode($"control")
)    

Explode 在这里不起作用,因为它不是一个普通的数组列,而是一个结构数组。你可能想尝试类似的东西

df.select(col("control.controlIndex"), col("control.customerValue"), col ("control. guid"), col("control. defaultValue"), col(control. type))

相关内容

  • 没有找到相关文章

最新更新