我正在查看 Spark SQL 中 Spark DataFrame 的窗口滑动功能。我有一个列的数据帧id,month和volume。id month volume new_col1 201601 100 01 201602 120 1001 201603 450 2201 201604 200 6701 201605 121 870现在我想添加一个名为 name 的新列new_col,其值new_col是当前行volume和new_col之前的总和,如上所示。new_col第一行的值将为零。我尝试了以下选项来使用lagPySpark使用窗口函数。但是我发现该new_col列会被递归使用。仅使用lag函数的方式无法做到这一点:window = Window.partitionBy(F.col('id')).orderBy(F.col('month').asc())df.withColumn('new_col', F.lag(col('volume'), 1).over(window) + F.lag(col('new_col'), 1).over(window))有没有办法new_col通过使用窗口函数来动态滞后?或者有其他好的解决方案吗?
2 回答
不负相思意
TA贡献1777条经验 获得超10个赞
您可以在窗口上使用lag和sum来实现这一点。如果在窗口上使用,sum将自动计算cumsum。下面的代码将首先滞后volume列,然后取其 cumsum,但也可以以相反的顺序进行操作。
window = Window.partitionBy(F.col('id')).orderBy(F.col('month').asc())
df.withColumn('new_col', F.sum(F.lag(col('volume'), 1, 0).over(window)).over(window))
添加回答
举报
0/150
提交
取消