Pyspark - 通过查找“上一个”记录,将新列附加到数据框

时间:2017-11-20 15:22:21

标签: python apache-spark pyspark

我在处理这个问题时遇到了一些麻烦。

我有大量的事件数据,我正在尝试清理。其中一个要求是包含上一个事件的数据,我很难找到一种合适的方法来使用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%肯定这支持我的用例。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

只是因为其他人偶然发现了这一点。上述建议完美无缺。使用滞后窗口功能。 e.g。

df = df.withColumn("previous_event_value", 
  lag(df.event_value).over(Window.partitionBy("id").orderBy("e‌​vent_time")))