如何在连接pyspark中的文本列之前对值进行排序
how to sort value before concatenate text columns in pyspark
我需要帮助将以下代码转换为 Pyspark 代码或 Pyspark sql 代码。
df["full_name"] = df.apply(lambda x: "_".join(sorted((x["first"], x["last"]))), axis=1)
它基本上添加了一个新的列名称 full_name,它必须以排序的方式连接第一个和最后一个列的值。
我已经完成了以下代码,但不知道如何应用以对列文本值进行排序。
df= df.withColumn('full_name', f.concat(f.col('first'),f.lit('_'), f.col('last')))
来自 Spark-2.4+:
对于这种情况,我们可以使用 array_join, array_sort
函数。
示例:
df.show()
#+-----+----+
#|first|last|
#+-----+----+
#| a| b|
#| e| c|
#| d| a|
#+-----+----+
from pyspark.sql.functions import *
#first we create array of first,last columns then apply sort and join on array
df.withColumn("full_name",array_join(array_sort(array(col("first"),col("last"))),"_")).show()
#+-----+----+---------+
#|first|last|full_name|
#+-----+----+---------+
#| a| b| a_b|
#| e| c| c_e|
#| d| a| a_d|
#+-----+----+---------+
我需要帮助将以下代码转换为 Pyspark 代码或 Pyspark sql 代码。
df["full_name"] = df.apply(lambda x: "_".join(sorted((x["first"], x["last"]))), axis=1)
它基本上添加了一个新的列名称 full_name,它必须以排序的方式连接第一个和最后一个列的值。
我已经完成了以下代码,但不知道如何应用以对列文本值进行排序。
df= df.withColumn('full_name', f.concat(f.col('first'),f.lit('_'), f.col('last')))
来自 Spark-2.4+:
对于这种情况,我们可以使用 array_join, array_sort
函数。
示例:
df.show()
#+-----+----+
#|first|last|
#+-----+----+
#| a| b|
#| e| c|
#| d| a|
#+-----+----+
from pyspark.sql.functions import *
#first we create array of first,last columns then apply sort and join on array
df.withColumn("full_name",array_join(array_sort(array(col("first"),col("last"))),"_")).show()
#+-----+----+---------+
#|first|last|full_name|
#+-----+----+---------+
#| a| b| a_b|
#| e| c| c_e|
#| d| a| a_d|
#+-----+----+---------+