如何在Spark SQL中将多个列分解为行

时间:2018-05-22 11:57:14

标签: apache-spark apache-spark-sql apache-spark-dataset

我正在使用Spark SQL 2.2.0和DataFrame / DataSet API。

我需要每行爆炸几列。

我有:

+------+------+------+------+------+
|col1  |col2  |col3  |col4  |col5  |
+------+------+------+------+------+
|val11 |val21 |val31 |val41 |val51 |
|val12 |val22 |val32 |val42 |val52 |
+------+------+------+------+------+

我需要有以下内容:

+------+------+---------+---------+
|col1  |col2  |col_num  |col_new  |
+------+------+---------+---------+
|val11 |val21 |col3     |val31    |
|val11 |val21 |col4     |val41    |
|val11 |val21 |col5     |val51    |
|val12 |val21 |col3     |val32    |
|val12 |val21 |col4     |val42    |
|val12 |val21 |col5     |val52    |
+------+------+---------+---------+

我设法加入并像这样爆炸:

val df2 = df.select(col("col1"), col("col2"), array(col("col3"), col("col4"), col("col5")) as "array")
val df3 = df2.withColumn("array", explode(col("array")))

这样可行,但它不会添加col_num列(我需要它)。我尝试使用自定义地图功能使用flatMap但是它失败了。

你能帮我解决一下这个问题吗?

0 个答案:

没有答案