如何在python/pyspark中有效地将数组转换为字符串

Raj*_*Raj 1 python pyspark

我有一个带有以下架构的df:

root
 |-- col1: string (nullable = true)
 |-- col2: array (nullable = true)
 |    |-- element: string (containsNull = true)
Run Code Online (Sandbox Code Playgroud)

其中一列col2是一个数组[1#b,2#b,3#c].我想将其转换为字符串格式1#b,2#b,3#c.

我目前通过以下代码片段进行此操作

df2 = (df1.select("*",explode(col2)).drop('col2'))
df2.groupBy("col1").agg(concat_ws(",", collect_list('col')).alias("col2"))
Run Code Online (Sandbox Code Playgroud)

虽然这可以完成工作,但这需要时间并且效率也很低.有没有更好的选择.

Mar*_*usz 9

您可以concat_ws直接在列上调用,如下所示:

df1.withColumn('col2', concat_ws(',', 'col2'))
Run Code Online (Sandbox Code Playgroud)