【发布时间】:2017-03-17 04:31:54
【问题描述】:
我目前正在尝试在 PySpark 数据帧中提取一系列连续出现的事件并对它们进行排序/排序,如下所示(为方便起见,我已按 user_id 和 timestamp 对初始数据帧进行排序):
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.
到:
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.
我的猜测是我必须使用一个智能窗口函数,通过 user_id 和操作对表进行分区但只有当这些操作在时间上是连续的时!我不知道该怎么做...
如果有人在 PySpark 中遇到这种类型的转换,我会很高兴得到提示!
干杯
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql window-functions