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

我有一个包含两列“date”和“value”的数据框,如何在数据框中添加2个新列“value_mean”和“value_sd”,其中“value_mean”是过去10天内“value”的平均值(包括“date”中指定的当前日期和“value_sd”是过去10天内“值”的标准差?
最佳答案
Spark sql提供various dataframe function 像avg,mean,sum等.

您只需使用spark sql column应用于dataframe列

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

转载注明原文:Spark Scala – 如何在数据框中迭代行,并将计算值添加为数据框的新列 - 代码日志