我正在使用Spark 2.2.0和1.6.1。我的任务之一有以下表格:
|ID|DEVICE |HASH|
----------------
|12|2,3,0,2,6,4|adf7|
其中:
我需要将字段'DEVICE'扩展为6列,例如:
|ID|D1|D2|D3|D4|D5|D6|HASH|
---------------------------
|12|2 |3 |0 |2 |6 |4 |adf7|
感谢您的帮助。
答案 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|
// +---+---+---+---+---+---+---+----+