как отсортировать значение перед объединением текстовых столбцов в pyspark - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужна помощь для преобразования приведенного ниже кода в код 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')))

1 Ответ

0 голосов
/ 01 апреля 2020

С 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|
#+-----+----+---------+
...