过去几个月我一直在使用Apache Spark做了很多工作,但现在我收到了一项相当困难的任务,要在配对RDD
上的滑动窗口上计算平均/最小/最大等等其中Key组件是日期标记,值组件是矩阵。因此,每个聚合函数也应返回一个矩阵,对于每个单元格,该时间段内所有该单元格的平均值均为平均值。
我希望能够说我想要每7天的平均值,并且有一天的滑动窗口。滑动窗口移动单元总是一个,然后是窗口大小的单位(所以如果它每12周一次,窗口移动单位为1)。
我现在最初的想法是简单地迭代,如果我们想要每X天的平均值,X次,并且每次都按照它的日期对元素进行分组,并带有偏移量。
所以,如果我们有这种情况:
天数:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
矩阵:A B C D E F G H I J K L M N O
我们想要每5天的平均值,我会迭代5次并在此处显示分组:
第一次迭代:
第1组:(1,A)(2,B)(3,C)(4,D)(5,E)
第2组:(6,F)(7,G)(8,H)(9,I)(10,J)
第3组:(11,K)(12,L)(13,M)(14,N)(15,O)
第二次迭代:
第1组:(2,B)(3,C)(4,D)(5,E)(6,F)
第2组:(7,G)(8,H)(9,I)(10,J),(11,K)
第3组:(12,L)(13,M)(14,N)(15,O)
Etcetera,对于每个小组,我必须做一个折叠/缩小程序来获得平均值。
然而,正如您可能想象的那样,这非常缓慢,可能是一种相当糟糕的方式。我无法找到更好的办法。