我正在尝试对窗口上一列的值求和。我有两个时间戳列,一列代表开始时间,另一列代表一般观察时间。我需要对从开始时间(等于第一次观察时间)到当前观察时间的值求和。
我有以下数据框,并且已在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 |
+---+-----+---------------------+---------------------+---+