flink-自定义聚合函数
定义
自定义聚合函数(UDAF),将多条记录聚合成1条记录。其输入与输出是多对一的关系,即将多条输入记录聚合成一条输出值。函数注册
增加依赖:
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-common</artifactId>
<version>1.12.7</version>
<scope>provided</scope>
</dependency>
</dependencies>
代码示例:
package com.flink;
import org.apache.flink.table.functions.AggregateFunction;
import java.util.Iterator;
public class ASI_UDAF {
public static class AccSum {
public long sum;
}
public static class MySum extends AggregateFunction<Long, AccSum> {
@Override
public Long getValue(AccSum acSum) {
return acSum.sum;
}
@Override
public AccSum createAccumulator() {
AccSum acCount = new AccSum();
acCount.sum = 0;
return acCount;
}
public void accumulate(AccSum acc, long num) {
acc.sum += num;
}
/**
* Support retract a msg generated by upstream operator.
*/
public void retract(AccSum acc, long num) {
acc.sum -= num;
}
/**
* Support local-global two stage aggregate optimization.
*/
public void merge(AccSum acc, Iterable<AccSum> it) {
Iterator<AccSum> iter = it.iterator();
while (iter.hasNext()) {
AccSum accSum = iter.next();
if (null != accSum) {
acc.sum += accSum.sum;
}
}
}
}
}