1 回答
TA贡献1779条经验 获得超6个赞
我会给你一个不使用任何 UDF 的解决方案。
用于collect_set()获取具有非唯一值的列名列表
from pyspark.sql import functions as F
from pyspark.sql.functions import *
diff_col = [i for i in df.schema.names if \
(df.select(F.size(F.collect_set(i))).collect()[0][0] > 1)]
对于连接:
df.select(col("*"), concat(col("ColA"), lit(" "),concat(*diff_col))\
.alias("concat_col")).show()
+----+----+----+----+----------+
|ColA|ColB|ColC|ColD|concat_col|
+----+----+----+----+----------+
|Name| BA| CC| DA| Name BA|
|Name| BB| CC| DA| Name BB|
+----+----+----+----+----------+
或者,如果您希望多列的连接之间有空格(如果您有多列非唯一值),则:
df.select(col("*"), concat(col("ColA"), lit(" "),\
concat(*[F.concat(col(i),F.lit(" "))for i in diff_col])).alias("concat_col")).show()
添加回答
举报