Я использую метод collect_set для DataFrame и добавляю 3 столбца.
Мой df такой, как показано ниже:
id acc_no acc_name cust_id
1 111 ABC 88
1 222 XYZ 99
Ниже приведен фрагмент кода:
from pyspark.sql import Window
import pyspark.sql.functions as F
w = Window.partitionBy('id').orderBy('acc_no')
df1 = df.withColumn(
'cust_id_new',
F.collect_set(cust_id).over(w)
).withColumn(
'acc_no_new',
F.collect_set(acc_no).over(w)
).withColumn(
'acc_name_new',
F.collect_set(acc_name).over(w)
).drop('cust_id').drop('acc_no').drop('acc_name')
В этом случае мой вывод выглядит следующим образом:
id acc_no acc_name cust_id
1 [111,222] [XYZ,ABC] [88,99]
Таким образом, здесь acc_no и cust_id верны, но порядок acc_name неверен. acc_no 111 соответствует acc_name ABC, но мы получаем XYZ.
Может кто-нибудь, пожалуйста, дайте мне знать, почему это происходит и каково будет решение?
Я подозреваю, что эта проблемапроисходит только для строкового столбца, но я могу ошибаться. Пожалуйста, помогите ...
Это похоже на тему ниже, но я все еще получаю ошибку.
Как поддерживать порядок сортировки в PySpark collect_list и собирать несколько списков