开发者社区 问答 正文

flink中每个 AggregateFunction 必须要实现的是什么方法?

flink中每个 AggregateFunction 必须要实现的是什么方法?

展开
收起
游客qzzytmszf3zhq 2021-12-07 20:34:33 430 分享 版权
1 条回答
写回答
取消 提交回答
  • createAccumulator() accumulate() getValue() Flink 的类型推导在遇到复杂类型的时候可能会推导出错误的结果,比如那些非基本类型和普通的 POJO 类型的复杂类型。所以跟 ScalarFunction 和 TableFunction 一样,AggregateFunction 也提供了 AggregateFunction#getResultType() 和 AggregateFunction#getAccumulatorType() 来分别指定返回值类型和 accumulator 的类型,两个函数的返回值类型也都是 TypeInformation。

    除了上面的方法,还有几个方法可以选择实现。这些方法有些可以让查询更加高效,而有些是在某些特定场景下必须要实现的。例如,如果聚合函数用在会话窗口(当两个会话窗口合并的时候需要 merge 他们的 accumulator)的话,merge() 方法就是必须要实现的。

    2021-12-07 20:34:49
    赞同 展开评论