Pyspark: Benutzerdefinierte Fensterfunktion

Ich versuche derzeit, eine Reihe aufeinanderfolgender Vorkommen in einem PySpark-Datenrahmen zu extrahieren und sie wie unten gezeigt zu ordnen / einzuordnen (der Einfachheit halber habe ich den anfänglichen Datenrahmen nach @ bestelluser_id undtimestamp):

df_ini
+-------+--------------------+------------+
|user_id|     timestamp      |  actions   |
+-------+--------------------+------------+
| 217498|           100000001|    'A'     |
| 217498|           100000025|    'A'     |
| 217498|           100000124|    'A'     |
| 217498|           100000152|    'B'     |
| 217498|           100000165|    'C'     |
| 217498|           100000177|    'C'     |
| 217498|           100000182|    'A'     |
| 217498|           100000197|    'B'     |
| 217498|           100000210|    'B'     |
| 854123|           100000005|    'A'     |
| 854123|           100000007|    'A'     |
| etc.

to:

expected df_transformed
+-------+------------+------------+------------+
|user_id|  actions   | nb_of_occ  |    order   |
+-------+------------+------------+------------+
| 217498|    'A'     |      3     |     1      |
| 217498|    'B'     |      1     |     2      |
| 217498|    'C'     |      2     |     3      |
| 217498|    'A'     |      1     |     4      |
| 217498|    'B'     |      2     |     5      |
| 854123|    'A'     |      2     |     1      |
| etc.

Meine Vermutung ist, dass ich eine intelligente Fensterfunktion verwenden muss, die die Tabelle nach Benutzer-ID und Aktionen aufteilt.aber nur wenn diese Aktionen zeitlich aufeinander folgen! Was ich mir nicht vorstellen kann, wie es geht ...

Wenn jemand in PySpark auf diese Art von Transformation gestoßen ist, würde ich mich über einen Hinweis freuen!

Pros

Antworten auf die Frage(4)

Ihre Antwort auf die Frage