我有一个DataStream<Tuple2<String, Double>> one
和DataStream<Tuple2<String, Double>> second
,其中第一个元素比另一个元素多得多,它们有不同的键。此外,数据流"二"基本上有一个键值对。所以,我想连接这些流,以便将第一个数据流的值除以第二个数据流中的常数值。如何在Apache Flink中做到这一点?这是通过连接的数据流完成的,还是另一种方式?
在所描述的情况下,最好的想法是简单地使用广播状态模式。具有较少元素的第二流将变为广播流,并且具有更多元素的第一流随后将用第二流的元素来丰富。所以,你会有这样的东西:
//define broadcast state here
firstStream.keyBy([someKey])
.connect(secondStream.broadcast([mapStateDescriptor])
.process([YourProcessFunction])
然后在流程元素的流程函数中,您可以进行富集以生成预期的元组。
有关广播模式的更多信息,请点击此处:https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/state/broadcastrongtate.html