0
我需要在Spark上使用R对大型时间序列数据集执行移动平均。SparkR中的移动平均数
我看到有在Scala和Java实现这一点: Moving Average in Spark Java, Apache Spark Moving Average 但没有在[R。
我需要在Spark上使用R对大型时间序列数据集执行移动平均。SparkR中的移动平均数
我看到有在Scala和Java实现这一点: Moving Average in Spark Java, Apache Spark Moving Average 但没有在[R。
我设法解决这个使用SparkR窗口函数。我使用Spark 2.0 btw。
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)
有一点需要注意的上面是星火将尝试所有的数据加载到一个分区,以便它可以在大型数据集的速度慢,很遗憾。我希望底层的实现是不同的,但我明白,在任何分布数据的系统上,对有序数据计算滑动窗口是很困难的。
如果你足够幸运,你的移动平均可以对数据的分区中运行,那么你可以改变你的窗口:
ws <- orderBy(windowPartitionBy("my_partition_column"), sdf$orderingColumn)