Apache spark SPARK SQL,如何将嵌套数组[…]字段扩展到平面表

Apache spark SPARK SQL,如何将嵌套数组[…]字段扩展到平面表,apache-spark,apache-spark-sql,spark-dataframe,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 设备字符串 散列字符串 我需要将“设备”字段扩展到6列,例如: |ID|D1|D2|D3|D4|D5|D6|HASH| --------------------------- |12|2 |3 |0 |2 |6 |4 |adf7| 谢谢您的帮助。获取最大长度: import

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

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

  • ID-long
  • 设备字符串
  • 散列字符串
我需要将“设备”字段扩展到6列,例如:

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

谢谢您的帮助。

获取最大长度:

import org.apache.spark.sql.functions.{size,max}
导入org.apache.spark.sql.Row
val df=Seq((“12”,Seq(2,3,0,2,6,4),“adf7”)。toDF(“id”,“device”,“hash”)
val行(n:Int)=df.select(最大(大小($“设备”))。首先
如果你事先知道这个数字,直接跳到第二部分

一旦定义了
n
,只需选择

df.select(
$“id”+:(0到n).map(i=>$“设备”(i).alias(s“d$i”):+$“哈希”:_*
).表演
// +---+---+---+---+---+---+---+----+
//| id | d0 | d1 | d2 | d3 | d4 | d5 |散列|
// +---+---+---+---+---+---+---+----+
//| 12 | 2 | 3 | 0 | 2 | 6 | 4 | adf7|
// +---+---+---+---+---+---+---+----+

字段“设备”的项数为常量,您可以跳过第一步。