- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个带有 key 和时间戳的流。我想在每个窗口(滑动窗口)中创建这些键的笛卡尔积。如果我有键 1,2,3,4 并且我已将并行度设置为 2,我想按以下方式对它们进行“分组”:
1 - 2 2 - 3
1 - 3 2 - 4
1 - 4 3 - 4
我想处理每个窗口每个组的元素。因此,想象一下上述元素 (1,2,3,4) 基于它们的时间戳位于同一窗口中。
以最简单的形式,我的问题是:给定每个滑动窗口中的一些元素(可能包含多个键),我想创建这些键的组合,如上例所示,并对这些分组元素应用自定义算法。
到目前为止我所尝试的是使用
.assignAscendingTimestamps(...)
.keyBy(...)
.timeWindow(Time.seconds(5),Time.seconds(5))
.apply(...)
但这只会对每个键应用一个算法,而且无法创建组合。
P.S.:我看过这个文档:https://cwiki.apache.org/confluence/display/FLINK/Streams+and+Operations+on+Streams
我认为那里提到的离散流可以解决问题,但它们在 flink 1.2(或任何其他版本)中不可用。
最佳答案
流处理上下文中的 keyBy()
与批处理上下文中的 groupBy()
具有类似的效果。根据您提供的KeySelector
,流被划分为多个子流。然后将它们输入到您的 timeWindow
中。因此,您当前在示例中执行的是 KeyedStream
上的 timeWindow
。进入 timeWindow
并发送到您随后应用的函数中的所有元素都将具有完全相同的键。这是对 Flink 中窗口的精彩介绍,其中更详细地介绍了如何使用窗口 https://flink.apache.org/news/2015/12/04/Introducing-windows.html 。如果您的键包含语义信息,并且您希望在同一窗口中拥有不同的键,则可以创建一个分配给记录的人工键(例如简单整数)。基于此键,您可以更好地控制分组以及流分区。对于获取前面步骤的结果并将它们连接起来的最终计算,您需要一个额外的步骤(例如 join
或 reduce
)。看一下这里的第一个示例:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html它使用 sum()
函数对 5 秒的 timeWindow
内具有给定键的所有元素进行计数。结果将包含每个窗口的每个键一个元素。
关于java - Flink 流 - 笛卡尔积和流上的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42155737/
我是一名优秀的程序员,十分优秀!