例如,自定义Aggregate函数,accumulator的 Set 中的内容会保存到state中么 代码如下:
public class AggregateResult implements Serializable {
private String key;
private Double result = 0.0;
private Set<String> distinct;
}
public class DistinctCountFunction implements AggregateFunction<CalDetail, AggregateResult, AggregateResult> {
@Override public AggregateResult createAccumulator() {
AggregateResult result = new AggregateResult();
result.setDistinct(new HashSet<>());
return result;
}
@Override public AggregateResult add(CalDetail value, AggregateResult accumulator) {
accumulator.setKey(value.getGroupKey());
accumulator.getDistinct().add(value.getData());
accumulator.setResult((double) accumulator.getDistinct().size());
return accumulator;
}
@Override public AggregateResult getResult(AggregateResult accumulator) {
return accumulator;
}
@Override public AggregateResult merge(AggregateResult a, AggregateResult b) {
// 暂不处理
return a;
}
}
只要是set中的数据参与计算,就会被记录,这就是我们为什么会使用状态。但是具体怎么存储的还不是很清楚。
推荐文章,https://blog.csdn.net/aa1215018028/article/details/93159049,里边写的很细
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。