Pyspark窗口:在某个时间戳范围内的一列上求和,直到当前行

时间:2019-01-22 12:57:50

标签: python dataframe pyspark

我正在尝试对窗口上一列的值求和。我有两个时间戳列,一列代表开始时间,另一列代表一般观察时间。我需要对从开始时间(等于第一次观察时间)到当前观察时间的值求和。

我有以下数据框,并且已在id列上创建了windowspec分区。

+---+-----+---------------------+---------------------+
|id |value|observed             |start                |
+---+-----+---------------------+---------------------+
|a  |1    |2018-09-20 18:12:03.0|2018-09-20 18:16:00.0|
|b  |3    |2018-09-20 18:16:03.0|2018-09-20 18:16:00.0|
|a  |2    |2018-09-20 18:16:03.0|2018-09-20 18:16:00.0|
|a  |6    |2018-09-20 18:18:50.0|2018-09-20 18:16:00.0|
+---+-----+---------------------+---------------------+
my_window = Window.partitionBy('id').orderBy('observed')
                 .rangeBetween(Window.unboundedPreceding, Window.currentRow)
df.withColumn('sum', F.sum(F.col('value')).over(my_window)).show(truncate=False)

我可以从第一行到当前行获取value列的总和,但我想要的是求和窗口从“ start timestamp”开始,并按如下所示添加到当前时间戳,如下所示- 2018-09-20 18:18:50.0'我想要的总和是8,从开始时间到当前时间。我该如何实现?

+---+-----+---------------------+---------------------+---+
|id |value|observed             |start                |sum|
+---+-----+---------------------+---------------------+---+
|b  |3    |2018-09-20 18:16:03.0|2018-09-20 18:16:00.0|3  |
|a  |1    |2018-09-20 18:12:03.0|2018-09-20 18:16:00.0|1  |
|a  |2    |2018-09-20 18:16:03.0|2018-09-20 18:16:00.0|3  |
|a  |6    |2018-09-20 18:18:50.0|2018-09-20 18:16:00.0|8  |
+---+-----+---------------------+---------------------+---+

0 个答案:

没有答案