我正在使用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
但是它失败了。
你能帮我解决一下这个问题吗?