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
永远不会被调用。