【问题标题】:Spark SQL to explode array of structureSpark SQL 爆炸结构数组
【发布时间】:2018-10-15 10:43:15
【问题描述】:

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

【问题讨论】:

  • 可以添加你试过的代码吗?
  • 我试过了——从myview中选择explode(control) 它制作一列并将每个结构放入其中

标签: apache-spark-sql


【解决方案1】:

除了 Paul Leclercq 的回答之外,这也是可行的方法。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-04-27
        • 1970-01-01
        • 2019-07-24
        • 2021-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-09
        • 2018-06-27
        相关资源
        最近更新 更多