我有一个包含两列"日期"和"值"的数据帧,如何向数据帧添加 2 个新列"value_mean"和"value_sd",其中"value_mean"是过去 10 天(包括"日期"中指定的当前日期)的"值"平均值,"value_sd"是过去 10 天"值"的标准差?
Spark
sql提供了各种数据帧函数,如avg,mean,sum等。
只需使用 Spark SQL 列在数据帧列上应用即可
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
现在 yon 可以在您的过滤器上应用聚合函数DF
filterDF.agg(stdv, value_mean).show