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
Другие вопросы по тегам