我有一个包含两列的数据框" date"和"值",如何添加2个新列" value_mean"和" value_sd"到数据框,其中" value_mean"是"值的平均值"过去10天(包括" date"中指定的当天)和" value_sd"是"值的标准偏差"过去10天?
答案 0 :(得分:3)
Spark sql提供various dataframe function ,如avg,mean,sum等。
您只需使用spark sql column
申请数据框列import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.Column
为标准差创建私有方法
private def stddev(col: Column): Column = sqrt(avg(col * col) - avg(col) * avg(col))
现在您可以为平均值和标准差创建sql列
val value_sd: org.apache.spark.sql.Column = stddev(df.col("value")).as("value_sd")
val value_mean: org.apache.spark.sql.Column = avg(df.col("value").as("value_mean"))
过滤10天或根据需要过滤数据框
val filterDF=df.filter("")//put your filter condition
现在你可以在你的filterDF上应用聚合函数
filterDF.agg(stdv, value_mean).show