Pyspark中的滞后移位函数

在PySpark中,没有您预期的shift函数,并且您在使用lag时的方向是正确的。但是这里有一个小技巧,当你必须在lag_1的基础上进行lag_2等等。

from pyspark.sql import functions as F
from pyspark.sql import Window as W

df = df.withColumn('lag_0', F.col('num_orders'))
for lag in range(1, 8):
    df = (df
        .withColumn(f'lag_{lag}', F
            .lag(f'lag_{lag - 1}')
            .over(W
                .partitionBy(F.lit(1))
                .orderBy('date')
            )
        )
    )

±—±---------±----±----±----±----±----±----±----±----+
|date|num_orders|lag_0|lag_1|lag_2|lag_3|lag_4|lag_5|lag_6|lag_7|
±—±---------±----±----±----±----±----±----±----±----+
| 1| 124| 124| null| null| null| null| null| null| null|
| 2| 85| 85| 124| null| null| null| null| null| null|
| 3| 71| 71| 85| 124| null| null| null| null| null|
| 4| 66| 66| 71| 85| 124| null| null| null| null|
| 5| 43| 43| 66| 71| 85| 124| null| null| null|
| 6| 6| 6| 43| 66| 71| 85| 124| null| null|
| 7| 12| 12| 6| 43| 66| 71| 85| 124| null|
±—±---------±----±----±----±----±----±----±----±----+

你可能感兴趣的:(数学建模,pyspark,spark)