Spark Scala - 如何在数据框中迭代行,并将计算值添加为数据框的新列

时间:2016-02-11 19:37:27

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

我有一个包含两列的数据框" date"和"值",如何添加2个新列" value_mean"和" value_sd"到数据框,其中" value_mean"是"值的平均值"过去10天(包括" date"中指定的当天)和" value_sd"是"值的标准偏差"过去10天?

1 个答案:

答案 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