Pyspark: função de janela personalizada
Atualmente, estou tentando extrair séries de ocorrências consecutivas em um quadro de dados PySpark e ordená-las / classificá-las conforme mostrado abaixo (por conveniência, solicitei o quadro de dados inicial poruser_id
etimestamp
):
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.
para :
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.
Meu palpite é que eu tenho que usar uma função de janela inteligente que particione a tabela por user_id e açõesmas somente quando essas ações são consecutivas no tempo ! Que eu não consigo imaginar como fazer ...
Se alguém encontrou esse tipo de transformação no PySpark antes, ficaria feliz em receber uma dica!
Felicidades