Flink中两个数据流的高效压缩(用position作为隐式 key join)


0

我对使用apacheflink高效地压缩两个数据流很感兴趣(但同样的问题也可能适用于 DataSet )。

作为一个例子(使用Scala表示法),我有

names: DataStream[String]
ages: DataStream[Int]

我想得到

combined: DataStream[(String, Int)]

其中,使用数据在流中的位置隐式地进行 join(非正式地:combined(i)=(names(i),ages(i)))。我可以通过向每个流添加一个“position”字段,然后使用position作为 key将它们 join在一起,这是非常低效的。

有更好的方法吗?谢谢!

1 答案


0

可以使用自定义的CoFlatMap函数。为了实现这一点,您还需要两个内部FIFO缓冲区,因为这两个map方法都将以不可预知的顺序被调用(这取决于数据何时可用于两个输入)。

因此,算法的 job 原理如下(两个 map函数的算法相同):

    在每次调用时,将输入元组附加到自己的缓冲区

当然,您可以对这个算法进行更多的优化——这个版本只说明了主要思想。


我来回答

写文章

提问题

面试题