在多列上应用窗口函数

时间:2017-04-21 14:55:45

标签: apache-spark apache-spark-sql

我想执行窗口函数(具体移动平均值),但是要在数据帧的所有列上执行。

我可以这样做

df.select([func.avg(df[col]).over(windowSpec).alias(col) for col in df.columns])
但是我担心这不是很有效率。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

一个更好的替代方法是创建一个新的df,在其中您可以对Window函数中的列进行分组,并对其余列应用平均值,然后进行左连接。对于将df溢出到磁盘(或无法持久存储在内存中)的大型数据帧,这绝对是最佳选择。