我试图将列转置为行。 首先将列合并为数组 第二步是爆炸数组列
爆炸功能不起作用..
>>> 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|
+------------------------------------------------------------+
任何原因导致爆炸不起作用?
答案 0 :(得分:1)
由于您使用array(concat(..))
表示一个值的数组并展开该值,因此您只会得到一行,即相同的值。
使用split
代替array
filteredPaths1.select(explode(split(concat_ws(",",col("v1.id"),col("v2.id"),col("v2.id")),",")).alias("test"))