pyspark concat将列转换为数组并分解值

eyh26e7m  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(491)

我正在尝试将列转换为行。第一步是将列合并到数组中,第二步是分解数组列
分解函数不工作。。

>>> 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|
+------------------------------------------------------------+

有什么理由爆炸不起作用吗?

oknrviil

oknrviil1#

因为你正在使用 array(concat(..)) 表示一个值的数组&分解这个值,您将只得到一行,即相同的值。
使用 split 而不是 array ```
filteredPaths1.select(explode(split(concat_ws(",",col("v1.id"),col("v2.id"),col("v2.id")),",")).alias("test"))

相关问题