Pyspark concat列到数组并爆炸值

时间:2020-06-20 15:35:14

标签: apache-spark pyspark

我试图将列转置为行。 首先将列合并为数组 第二步是爆炸数组列

爆炸功能不起作用..

>>> filteredPaths1.select(   array ( concat( col("v1.id"),lit(","),col("v2.id"),lit(",") ,col("v2.id") )).alias("test")     ).printSchema()
root
 |-- test: array (nullable = false)
 |    |-- element: string (containsNull = true)

数组列中的值-

>>> filteredPaths1.select(   array ( concat( col("v1.id"),lit(","),col("v2.id"),lit(",") ,col("v2.id") )).alias("test")     ).show(10,False)
+--------------------------------------------------------------+                ]
|test                                                          |
+--------------------------------------------------------------+
|[Sorter_SAMPLE_CUSTOMER,Join_Source_Target,Join_Source_Target]|
+--------------------------------------------------------------+

但是,当尝试爆炸数组列时,它并没有创建新行,只是给出了相同的输出-

>>> filteredPaths1.select(   explode (array ( concat( col("v1.id"),lit(","),col("v2.id"),lit(",") ,col("v2.id") )).alias("test") )    ).show(10,False)
+------------------------------------------------------------+                  ]
|col                                                         |
+------------------------------------------------------------+
|Sorter_SAMPLE_CUSTOMER,Join_Source_Target,Join_Source_Target|
+------------------------------------------------------------+

任何原因导致爆炸不起作用?

1 个答案:

答案 0 :(得分:1)

由于您使用array(concat(..))表示一个值的数组并展开该值,因此您只会得到一行,即相同的值。

使用split代替array

filteredPaths1.select(explode(split(concat_ws(",",col("v1.id"),col("v2.id"),col("v2.id")),",")).alias("test"))