Ich versuche, eine neue Spalte von Listen in PYSPARK zu erstellen, indem ich eine groupby-Aggregation für vorhandene Spaltensätze verwende. Ein Beispiel Eingangsdatenrahmen wird unten bereitgestellt:collect_list durch Beibehalten der Reihenfolge basierend auf einer anderen Variablen
------------------------
id | date | value
------------------------
1 |2014-01-03 | 10
1 |2014-01-04 | 5
1 |2014-01-05 | 15
1 |2014-01-06 | 20
2 |2014-02-10 | 100
2 |2014-03-11 | 500
2 |2014-04-15 | 1500
Die erwartete Ausgabe ist:
id | value_list
------------------------
1 | [10, 5, 15, 20]
2 | [100, 500, 1500]
Die Werte innerhalb einer Liste werden nach dem Datum sortiert.
Ich versuchte collect_list wie folgt verwendet:
from pyspark.sql import functions as F
ordered_df = input_df.orderBy(['id','date'],ascending = True)
grouped_df = ordered_df.groupby("id").agg(F.collect_list("value"))
Aber collect_list garantiert nicht, um selbst wenn ich den Eingangsdatenrahmen nach dem Datum vor der Aggregation sortieren.
Könnte jemand bei der Aggregation helfen, indem er die Reihenfolge basierend auf einer zweiten (Datums-) Variable beibehält?
Danke für die ausführliche Beispiel ... Ich habe gerade versucht es auf einem größeren Daten von ein paar Millionen, und ich bin genau die gleiche Sequenz wie die von collect_list bekommen ... Gibt es eine Möglichkeit, dies könnte zu erklären, warum passiert sein? Außerdem, überprüft, dass collect_list nur diese Fälle mit mehreren Werten innerhalb eines Datums zu vermasseln scheint ... Bedeutet es, dass collect_list auch die Reihenfolge beibehält? – Ravi
In Ihrem Code sortieren Sie den gesamten Datensatz vor collect_list(), also ja. Dies ist jedoch nicht notwendig. Es ist effizienter, die resultierende Liste von Tupeln nach dem Sammeln von Datum und Wert in einer Liste zu sortieren. – mtoto
Nur um zu verdeutlichen ... Sortierung der Spalte und Verwendung von Collect_list in der sortierten Spalte würde die Reihenfolge beibehalten? – Ravi