Spark:卡尔曼滤波器的窗口和UDAF



Holden Karau和Rachel Warren的《高性能Spark:扩展和优化Apache Spark的最佳实践》(第259页(:

窗口操作允许您计算最后K批数据的数据,这对于移动平均值或卡尔曼滤波器等非常方便

提醒一下,卡尔曼是一种顺序处理,用于根据以前的数据过滤一组数据。在观察了UDAF的行为之后,它似乎没有被调整,因为没有排序的概念(merge方法在没有排序的情况下合并结果(。

那么,如果UDAF不适合卡尔曼滤波和开窗,如何在一个窗口内计算卡尔曼滤波器呢?有这样使用开窗的例子吗?

请注意,该报价专门谈到窗口操作,因此您的假设

merge方法将结果与无顺序合并

不一定成立。如果窗口函数与ORDER BY子句一起应用,即

F(...) OVER (ORDER BY ... [<ROW or RANGE clause>])

F(...) OVER (PARTITION BY ... [<ROW or RANGE clause>])

显式顺序由表达式的上下文定义,合并以定义良好的方式调用。

由于与OVER一起使用的副作用聚合函数是顺序的(在前一种情况下是全局的,在后一种情况中是按分区的(,因此merge永远不会被调用。

最新更新