我正在尝试将列转换为行。第一步是将列合并到数组中,第二步是分解数组列
分解函数不工作。。
>>> 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条答案
按热度按时间oknrviil1#
因为你正在使用
array(concat(..))
表示一个值的数组&分解这个值,您将只得到一行,即相同的值。使用
split
而不是array
```filteredPaths1.select(explode(split(concat_ws(",",col("v1.id"),col("v2.id"),col("v2.id")),",")).alias("test"))