Если вы хотите сохранить доход для текущей строки и следующих 10 дней, используйте следующий код:
Например,
Первая строка: flightDate = 20, и вам нужен доходот 20 до 30 (обе даты включительно), что означает общий доход = 100.
Вторая строка: flightDate = 40 и вам нужен доход от 40 до 50 (обе даты включительно), что означает общий доход = 50 (на дату40) + 50 (на дату 50) = 120.
Третья строка: flightDate = 50, и вам нужен доход от 50 до 60 (обе даты включительно), что означает общий доход = 70 (на дату 50) + 40(для даты 51) + 60 (для даты 60) = 170
from pyspark.sql import *
from pyspark.sql.functions import *
import pandas as pd
FlightDate=[20,40,51,50,60,15,17,37,36,50]
IssuingDate=[10,15,44,45,55,10,2,30,32,24]
Revenue = [100,50,40,70,60,40,30,100,200,100]
Customer = ['a','a','a','a','a','b','b','b','b','b']
df = spark.createDataFrame(pd.DataFrame([Customer,FlightDate,IssuingDate, Revenue]).T, schema=["Customer",'FlightDate', 'IssuingDate','Revenue'])
windowSpec = Window.partitionBy("Customer").orderBy("FlightDate").rangeBetween(0,10)
df.withColumn("Sum", sum("Revenue").over(windowSpec)).sort("Customer").show()
Результат, как указано ниже
+--------+----------+-----------+-------+---+
|Customer|FlightDate|IssuingDate|Revenue|Sum|
+--------+----------+-----------+-------+---+
| a| 20| 10| 100|100|
| a| 40| 15| 50|120|
| a| 50| 45| 70|170|
| a| 51| 44| 40|100|
| a| 60| 55| 60| 60|
| b| 15| 10| 40| 70|
| b| 17| 2| 30| 30|
| b| 36| 32| 200|300|
| b| 37| 30| 100|100|
| b| 50| 24| 100|100|
+--------+----------+-----------+-------+---+