为了账号安全,请及时绑定邮箱和手机立即绑定

具有动态滞后的窗函数

具有动态滞后的窗函数

交互式爱情 2021-06-25 14:05:13
我正在查看 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))


查看完整回答
反对 回复 2021-06-29
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信