减少并加入 window
Reduce and join on window
我需要在 window 上加入两个键控流。但我需要先减少两个流,然后在同一 window.
内对聚合应用连接
我花了一些时间查看 Flink API,发现 WindowedStream 中存在这样的应用函数
public SingleOutputStreamOperator apply(ReduceFunction reduceFunction, WindowFunction 函数)
但我无法在 JoinedStream 中找到类似的功能。
题:
这会是对 Flink 的有用增强吗?
有没有我现在可以使用的解决方法。
如果您使用处理时间语义,您可以将 window-聚合独立应用于每个输入流并将结果提供给连接(当然,聚合和连接都必须使用相同 window 定义)。
像这样:
WindowAssigner w = ...
reducedStream1 = stream1.keyBy(...).window(w).apply(...);
reducedStream2 = stream2.keyBy(...).window(w).apply(...);
reducedStream1.join(reducedStream2)
.where(...).equalTo(...)
.window(w).apply(...);
对于处理时间,您需要使用以下方法编写您自己的自定义运算符:
stream1.coGroup(stream2)
.where(...).equalTo(...)
.window(...).apply(CoGroupFnction);
我需要在 window 上加入两个键控流。但我需要先减少两个流,然后在同一 window.
内对聚合应用连接我花了一些时间查看 Flink API,发现 WindowedStream 中存在这样的应用函数
public SingleOutputStreamOperator apply(ReduceFunction reduceFunction, WindowFunction 函数)
但我无法在 JoinedStream 中找到类似的功能。 题: 这会是对 Flink 的有用增强吗? 有没有我现在可以使用的解决方法。
如果您使用处理时间语义,您可以将 window-聚合独立应用于每个输入流并将结果提供给连接(当然,聚合和连接都必须使用相同 window 定义)。
像这样:
WindowAssigner w = ...
reducedStream1 = stream1.keyBy(...).window(w).apply(...);
reducedStream2 = stream2.keyBy(...).window(w).apply(...);
reducedStream1.join(reducedStream2)
.where(...).equalTo(...)
.window(w).apply(...);
对于处理时间,您需要使用以下方法编写您自己的自定义运算符:
stream1.coGroup(stream2)
.where(...).equalTo(...)
.window(...).apply(CoGroupFnction);