我看过实现UDAF的代码,却绕开了MutableAggregationBuffer的使用。
例如:
class WildUdaf extends UserDefinedAggregateFunction {
val someState: SomeType;
override def initialize(buffer: MutableAggregationBuffer): Unit = {
someState = ...; // some initialization
}
override def update(buffer: MutableAggregationBuffer, input: Row): Unit = {
someState.update(input)
}
override def merge(buffer1: MutableAggregationBuffer, buffer2: Row): Unit = throw new UnsupportedOperationException
...
}
此代码正在某些spark应用程序中运行,到目前为止,输出是正确的。
也许并非巧合,因此从未在此UDAF上调用merge()
函数;如果是这样,它将引发异常,请参见。以上。
这似乎是一种非常方便的处理方式,并且可以将遗留代码轻松集成到Spark应用程序中。
但是我怀疑这种方法一定有局限性。
所以,我的问题是,在什么条件下可以安全地执行此操作,并且在什么情况下会中断?