我在处理这个问题时遇到了一些麻烦。
我有大量的事件数据,我正在尝试清理。其中一个要求是包含上一个事件的数据,我很难找到一种合适的方法来使用pyspark
。
试图说明。假设我的数据框如下所示:
uid| id| event_time| event_value|
---|---|--------------------|------------|
1 | 1| 2017-11-20 12:00:00| a|
2 | 1| 2017-11-20 13:00:00| b|
3 | 2| 2017-11-20 12:00:00| c|
4 | 2| 2017-11-20 13:00:00| d|
5 | 2| 2017-11-20 14:00:00| e|
对于每条记录,我想找到具有相同ID的最新上一个事件,并将其作为新列附加。即。
uid| id| event_time| event_value| previous_event_value|
---|---|--------------------|------------|---------------------|
1 | 1| 2017-11-20 12:00:00| a| null|
2 | 1| 2017-11-20 13:00:00| b| a|
3 | 2| 2017-11-20 12:00:00| c| null|
4 | 2| 2017-11-20 13:00:00| d| c|
5 | 2| 2017-11-20 14:00:00| e| d|
我看了一些窗口函数,但我不是100%肯定这支持我的用例。任何帮助将不胜感激。
答案 0 :(得分:0)
只是因为其他人偶然发现了这一点。上述建议完美无缺。使用滞后窗口功能。 e.g。
df = df.withColumn("previous_event_value",
lag(df.event_value).over(Window.partitionBy("id").orderBy("event_time")))