什么时候可以将任意有状态对象放入UDAF?

时间:2019-06-19 13:36:48

标签: apache-spark

我看过实现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应用程序中。

但是我怀疑这种方法一定有局限性。

所以,我的问题是,在什么条件下可以安全地执行此操作,并且在什么情况下会中断?

0 个答案:

没有答案