java - 如何连接两个流并在 Flink 中进行操作?
问题描述
我有一个DataStream<Tuple2<String, Double>> one
and DataStream<Tuple2<String, Double>> second
,其中第一个有更多来自另一个的元素,并且它们有不同的键。而且,Datastream“二”基本上只有一个键值对。所以,我想连接这些流,以便将第一个数据流的值与第二个数据流的常数值相除。如何在 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/broadcast_state.html
推荐阅读
- flutter - 基于上周、上月和去年的 Flutter 过滤器列表
- java - 将 JAR 包装器连接到 BizTalk 中的 SVC 服务时出错
- laravel - 无法在 Linux 服务器上的 laravel 中使用 ffmpeg 将音频文件转换为 mp3
- reactjs - {React Native} 提交后重置 Formik 表单
- c# - Unity:当前上下文中不存在名称“Instance”
- android - Gradle 同步失败:索引 52 处的非法字符 <:>
- c - 如何同时等待孩子的终止和信号?
- ios - 在 Swift 中获取 PNG 右边缘的坐标
- algorithm - 找到涉及实数乘法的大哦
- python - 在 pyplot 中绘制颜色比例