【问题标题】:SPARK SQL, how expand nested array[.. ] field to flat tableSPARK SQL,如何将嵌套数组 [.. ] 字段扩展为平面表
【发布时间】:2018-02-02 00:51:54
【问题描述】:

我使用的是 Spark 2.2.0 和 1.6.1。我的一项任务有下表:

|ID|DEVICE     |HASH|
----------------
|12|2,3,0,2,6,4|adf7|

地点:

  • ID - 长
  • 设备 - 字符串
  • 哈希 - 字符串

我需要将字段 'DEVICE' 扩展为 6 列,例如:

|ID|D1|D2|D3|D4|D5|D6|HASH|
---------------------------
|12|2 |3 |0 |2 |6 |4 |adf7|

谢谢你的帮助。

【问题讨论】:

    标签: apache-spark apache-spark-sql spark-dataframe


    【解决方案1】:

    获取最大长度:

    import org.apache.spark.sql.functions.{size, max}
    import org.apache.spark.sql.Row
    
    val df = Seq(("12", Seq(2, 3, 0, 2, 6, 4), "adf7")).toDF("id", "device", "hash")
    val Row(n: Int) = df.select(max(size($"device"))).first
    

    如果您事先知道号码,请跳过此部分并直接进入第二部分。

    定义n 后,只需select

    df.select(
      $"id" +: (0 until n).map(i => $"device"(i).alias(s"d$i")) :+ $"hash": _*
    ).show
    
    // +---+---+---+---+---+---+---+----+
    // | id| d0| d1| d2| d3| d4| d5|hash|
    // +---+---+---+---+---+---+---+----+
    // | 12|  2|  3|  0|  2|  6|  4|adf7|
    // +---+---+---+---+---+---+---+----+
    

    【讨论】:

    • “DEVICE”字段的项目数不变
    • 那你可以跳过第一步。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多