我有此格式的数据框架:
Date | Return
01/01/2015 0.0
02/02/2015 0.04
03/02/2015 0.06
04/02/2015 0.16
我需要计算每个行的累积标准偏差,还需要选择上方的行数。因此,我的结果看起来有点像这样:
Date | Rows above | Compounded
01/01/2015 0 0(First element to be kept zero)
02/02/2015 1 0.02828427125(Std_Dev of 0,0.04)
03/02/2015 2 0.03055050463(Std_Dev of 0,0.04,0.06)
04/02/2015 3 0.06806859286(Std_Dev of 0,0.04,0.06,0.16)
我是SparkSQL的新手,特别是窗口功能的新手。因此,Java的答案将是高度敬意的。谢谢。
您实际上可以使用标准操作和窗口功能进行操作。基本上可以通过计算总和x^2,sum x和n(元素数)来计算标准偏差。因此,对窗口函数中的所有三个进行聚合,然后计算出与这些标准的偏差。
所以类似的东西(Freeform pyspark):
window = Window.sortby("Date")
aggDF = df.agg(sum(df["Returns"]).alias("sumx"), sum(df["Returns"]*df["returns"]).alias("sumx2"), count(df["returns"]).alias("cnt"))
Ex_2 = aggDF["sumx2"] / aggDF["cnt"])
Ex = aggDF["sumx"] / aggDF["cnt"])
newDF = df.withcolumn("Var", Ex_2 - (Ex * Ex))
当然,您必须处理0个元素的情况,如果要进行标准偏差而不是方差,则应采用平方根