PySpark 按顺序连接两列

PySpark concat two columns in order

我想连接两列,但它们是按顺序排列的。 例如我有这样的数据框:

|-------------------|-----------------|
|      column_1     |     column_2    |
|-------------------|-----------------|
|          aaa      |        bbb      |
|-------------------|-----------------|
|          bbb      |        aaa      |
|-------------------|-----------------|

Returns 像这样的数据框:

|-------------------|-----------------|-----------------|
|      column_1     |     column_2    |  concated_cols  |
|-------------------|-----------------|-----------------|
|         aaa       |       bbb       |    aaabbb       |
|-------------------|-----------------|-----------------|
|         bbb       |       aaa       |    aaabbb       |
|-------------------|-----------------|-----------------|

版本 Spark >= 2.4

from pyspark.sql import functions as F

df.withColumn(
    "concated_cols",
    F.array_join(F.array_sort(F.array(F.col("column_1"), F.col("column_2"))), ""),
).show()

Spark <= 2.3 版本。 使用简单的 UDF :

from pyspark.sql import functions as F

@F.udf
def concat(*cols):
    return "".join(sorted(cols))


df.withColumn("concated_cols", concat(F.col("column_1"), F.col("column_2"))).show()
+--------+--------+-------------+
|column_1|column_2|concated_cols|
+--------+--------+-------------+
|     aaa|     bbb|       aaabbb|
|     bbb|     aaa|       aaabbb|
+--------+--------+-------------+