Spark SQL中的累积偏差

时间:2016-12-12 21:05:05

标签: apache-spark apache-spark-sql spark-dataframe

我有这种格式的数据框:

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中的答案将非常值得注意。感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用标准操作和窗口功能实际执行此操作。 基本上标准偏差可以通过计算和X ^ 2,和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个元素的情况,如果你想做标准差而不是方差你应该取平方根