Spark Scala - Как перебирать строки в фрейме данных и добавлять вычисленные значения в качестве новых столбцов фрейма данных
У меня есть фрейм данных с двумя столбцами "дата" и "значение", как мне добавить 2 новых столбца "value_mean" и "value_sd" в фрейм данных, где "value_mean" является средним значением "значение" за последние 10 дней (включая текущий день, указанный в "date") и "value_sd", является стандартным отклонением "value" за последние 10 дней?
1 ответ
Spark sql предоставляет различные функции для работы с кадрами, такие как avg, mean, sum и т. Д.
вам просто нужно применить к столбцу dataframe, используя столбец 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
Теперь вы можете применить агрегатную функцию к вашему filterDF
filterDF.agg(stdv, value_mean).show