SparkR 中的移动平均线

Moving Average in SparkR

我需要使用 R on Spark 对大型时间序列数据集进行移动平均。

我看到 Scala 和 Java 中有此实现: , Apache Spark Moving AverageR.

中没有任何内容

我设法使用 SparkR window 函数解决了这个问题。我正在使用 Spark 2.0 顺便说一句。

set.seed(123)

#generate poisson distribution for easy checking, with lambda = 15
n <- 1000
orderingColumn = seq(1,n)
data = rpois(n, 15)
df <- data.frame(orderingColumn, data)

#Create sparkdf
sdf <- as.DataFrame(df); 

#Moving average
ws <- windowOrderBy(sdf$orderingColumn)
frame <- rowsBetween(ws, -100, 0) #100 observations back included in average
sdfWithMa <- withColumn(sdf, "moving_average", over(avg(sdf$data), frame))

head(sdfWithMa, 100)

上面需要注意的一件事是,Spark 将尝试将所有数据加载到单个分区中,因此不幸的是,它在大型数据集上可能会很慢。我希望底层实现有所不同,尽管我知道在任何数据分布的系统上计算有序数据的滑动 windows 都很困难。

如果您足够幸运,您的移动平均线可以在数据分区上 运行,那么您可以更改 window:

ws <- orderBy(windowPartitionBy("my_partition_column"), sdf$orderingColumn)