SPARK SQL,如何将嵌套数组[..]字段扩展为平面表

时间:2018-02-01 16:02:13

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

我正在使用Spark 2.2.0和1.6.1。我的任务之一有以下表格:

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

其中:

  • ID - long
  • 设备 - 字符串
  • HASH - string

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分: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|
// +---+---+---+---+---+---+---+----+