首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flink streaming -笛卡尔乘积和流上的窗口

Flink streaming -笛卡尔乘积和流上的窗口
EN

Stack Overflow用户
提问于 2017-02-10 17:24:16
回答 1查看 610关注 0票数 0

假设我有一个带有键和时间戳的流。我想在每个窗口(滑动窗口)中创建这些关键点的笛卡尔乘积。如果我有键1,2,3,4,并且我将并行度设置为2,我想用以下方式对它们进行“分组”:

代码语言:javascript
复制
1 - 2    2 - 3
1 - 3    2 - 4
1 - 4    3 - 4

并且我希望在每个窗口中按组处理元素。因此,假设上面的元素(1,2,3,4)基于它们的时间戳在同一个窗口中。

在最简单的形式中,我的问题是:给定每个滑动窗口中的一些元素(可能包含几个键),我希望创建上述示例中这些键的组合,并对这些分组的元素应用自定义算法。

到目前为止,我尝试的是使用

代码语言:javascript
复制
.assignAscendingTimestamps(...)
.keyBy(...)
.timeWindow(Time.seconds(5),Time.seconds(5))
.apply(...)

但这只会对每个键应用一个算法,而且不能创建组合。

附言:我看过这个文档:https://cwiki.apache.org/confluence/display/FLINK/Streams+and+Operations+on+Streams

我认为这里提到的离散化的流可以做到这一点,但它们在flink 1.2 (或任何其他版本)中都不可用。

EN

回答 1

Stack Overflow用户

发布于 2017-02-14 17:57:40

流式处理上下文中的keyBy()具有与批处理上下文中的groupBy()相当的效果。根据您提供的KeySelector,流被划分为多个子流。然后这些数据会被输入到你的timeWindow中。因此,您当前在示例中所做的是KeyedStream上的timeWindow。所有进入timeWindow并发出到您随后应用的函数中的元素都将具有完全相同的键。下面是对Flink中窗口操作的一个很好的介绍,详细介绍了如何使用windows https://flink.apache.org/news/2015/12/04/Introducing-windows.html。如果您的键包含语义信息,并且您希望在同一窗口中具有不同的键,则可以创建一个分配给记录的人工键(例如,一个简单的整数)。基于此键,您可以更好地控制分组,从而实现流分区。对于采用前面步骤的结果并将它们结合在一起的最终计算,您将需要一个额外的步骤(例如joinreduce)。看一下这里的第一个示例:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html,它使用sum()函数在5秒的timeWindow内计算具有给定键的所有元素。结果将为每个窗口的每个键包含一个元素。

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

https://stackoverflow.com/questions/42155737

复制
相关文章

相似问题

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