如何展开数组列,以使数组中的每个元素成为数据框中的一列?
数据框包含一个数组列,并且数组的大小不固定。意思是,第一行中的数组列可以具有n个元素,第二行中的数组列可以具有m个元素。
我尝试了explode()函数,但是将数组分为行而不是列。
Input dataframe
+---+------------------------------------------+
|id |arr |
+---+------------------------------------------+
|1 |[{cid = a, pid = 12}, {cid = b, pid = 13}]|
|2 |[{cid = c, pid = 12}] |
+---+------------------------------------------+
Expected dataframe
+---+--------------------------------------------------+
|id |arr_12_cid | arr_12_pid | arr_13_cid | arr_13_pid |
+---+--------------------------------------------------+
|1 |a | 12 | b | 13 |
|2 |c | 12 | null | null |
+---+--------------------------------------------------+
答案 0 :(得分:0)
您可以在单独的列中获取数组的大小,找到最大值,然后进行迭代
val dataDF = Seq((1, Array("a", "b", "c", "d")), (2, Array("a", "b"))).toDF("id", "data")
val z = dataDF.withColumn("data_length", functions.size($"data")).selectExpr("max(data_length)").head().getInt(0)
dataDF.select((0 until z).map(r => dataDF.col("data").getItem(r)): _*).show()