【发布时间】:2018-09-25 01:05:19
【问题描述】:
我指的是How to explode an array into multiple columns in Spark 有类似的需求。
我可以将该代码用于单个数组字段数据帧,但是,当我有多个数组字段数据帧时,我无法将两者都转换为多个列。
例如,
数据框1
+--------------------+----------------------------------+----------------------------------+
| f1 |f2 |f3 |
+--------------------+----------------------------------+----------------------------------+
|12 | null| null|
|13 | null| null|
|14 | null| null|
|15 | null| null|
|16 | null| null|
|17 | [[Hi, 256, Hello]]| [[a, b], [a, b, c],[a, b]]|
|18 | null| null|
|19 | null| null|
+--------------------+----------------------------------+----------------------------------+
我想把它转换成下面的数据框:
dataframe2
+--------------------+----------------------------------+----------------------------------+----------------------------------+
| f1 |f2_0 |f3_0 |f3_1 |
+--------------------+----------------------------------+----------------------------------+----------------------------------+
|12 | null| null| null|
|13 | null| null| null|
|14 | null| null| null|
|15 | null| null| null|
|16 | null| null| null|
|17 | [Hi, 256, Hello]| [a, b]| [a, b, c]|
|18 | null| null| null|
|19 | null| null| null|
+--------------------+----------------------------------+----------------------------------+----------------------------------+
我尝试了以下代码:
val dataframe2 = dataframe1.select(
col("f1") +: (0 until 2).map(i => col("f2")(i).alias(s"f2_$i")): _* +: (0 until 2).map(i => col("f3")(i).alias(s"f3_$i")): _*
)
但它会抛出一个错误,说它在第一个“_*”之后需要一个“)”。
【问题讨论】:
标签: scala apache-spark apache-spark-sql