Порядок не сохраняется в PySpark collect_set только для строкового столбца - PullRequest
0 голосов
/ 28 октября 2019

Я использую метод 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 и собирать несколько списков

...