在 Flink 中高效压缩两个数据流(以位置作为隐式键连接)



我对使用 Apache Flink 有效地将两个数据流压缩在一起感兴趣(但同样的问题也可能适用于数据集)。

作为一个例子(使用 Scala 符号),我有

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

我想获得

combined: DataStream[(String, Int)]

其中,连接是使用流中数据的位置隐式进行的(非正式地:combined(i) = (names(i), ages(i)) )。我可以通过向每个流添加一个"位置"字段,然后使用位置作为键将它们连接在一起来获得这一点,但这效率很低。

有没有更好的方法可以做到这一点?谢谢!

您可以使用

自定义CoFlatMap函数。为此,您还需要两个内部FIFO缓冲区,因为这两个映射方法都将以不可预测的顺序调用(取决于两个输入的数据何时可用)。

因此,您的算法将按如下方式工作(两个映射函数的算法相同):

  1. 在每次调用时,将输入元组附加到自己的缓冲区
  2. 当其他缓冲区和自己的缓冲区不为空时,从每个缓冲区中获取一个元组并发出组合元组

当然,您可以对此算法应用更多优化 - 此版本仅说明主要思想。

相关内容

  • 没有找到相关文章

最新更新