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()
添加回答
舉報