Ich habe einige Daten, die ich nach einer bestimmten Spalte gruppieren möchte, dann eine Reihe von Feldern basierend auf einem rollierenden Zeitfenster aus der Gruppe aggregieren. HierWie Aggregieren über Rolling-Zeit-Fenster mit Gruppen in Spark
sind einige Beispieldaten:
df = spark.createDataFrame([Row(date='2016-01-01', group_by='group1', get_avg=5, get_first=1),
Row(date='2016-01-10', group_by='group1', get_avg=5, get_first=2),
Row(date='2016-02-01', group_by='group2', get_avg=10, get_first=3),
Row(date='2016-02-28', group_by='group2', get_avg=20, get_first=3),
Row(date='2016-02-29', group_by='group2', get_avg=30, get_first=3),
Row(date='2016-04-02', group_by='group2', get_avg=8, get_first=4)])
ich von group_by
gruppieren mag, dann Zeitfenster erstellen, die zum frühestmöglichen Zeitpunkt beginnen und verlängern, bis es für die Gruppe 30 Tage ohne Eintrag sind. Nach diesen 30 Tagen beginnt das nächste Zeitfenster mit dem Datum der nächsten Zeile, die nicht in das vorherige Fenster fällt.
Ich möchte dann aggregieren, zum Beispiel den Durchschnitt von get_avg
, und das erste Ergebnis von get_first
bekommen.
So sollte die Ausgabe für dieses Beispiel sein:
group_by first date of window get_avg get_first
group1 2016-01-01 5 1
group2 2016-02-01 20 3
group2 2016-04-02 8 4
edit: sorry ich meine Frage klar nicht richtig angegeben wurde. Ich möchte eigentlich ein Fenster, das nach 30 Tagen Inaktivität endet. Ich habe den group2-Teil des Beispiels entsprechend geändert.