首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Flink:如何使用本地预聚合计算窗口?

Apache Flink:如何使用本地预聚合计算窗口?
EN

Stack Overflow用户
提问于 2017-12-15 11:51:43
回答 1查看 366关注 0票数 2

我有一个DataStream,需要在它上面计算一个窗口聚合。当我执行常规窗口聚合时,网络IO非常高。因此,我希望执行本地预聚合,以减少网络IO。

我想知道是否有可能在本地对任务管理器进行预聚合(即,在混洗记录之前),然后执行完整的聚合。使用Flink的DataStream应用程序接口可以做到这一点吗?

我的代码是:

代码语言:javascript
复制
DataStream<String> dataIn = .... 
dataIn
  .map().filter().assignTimestampsAndWatermarks()
  .keyBy().window().fold()
EN

回答 1

Stack Overflow用户

发布于 2017-12-15 16:01:53

当前版本的Flink (Flink 1.4.0,2017年12月)没有内置的对预聚合的支持。但是,在下一个版本(1.5.0)中添加此功能的工作正在进行中,请参阅FLINK-7561

您可以基于ProcessFunction实现预聚合操作。ProcessFunction可以将预聚集保存在内存中的HashMap中(固定大小),并注册计时器、事件时间和处理时间),以周期性地发出预聚集。状态(即HashMap的内容)应该持久化在managed operator state中,以防止在发生故障时丢失数据。在设置定时器时,您需要遵守窗口边界。

请注意,FoldFunction已被弃用,应由AggregateFunction取代。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47825565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档