0

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

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

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

我想获得

combined: DataStream[(String, Int)]

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

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

4

1 回答 1

0

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

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

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

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

于 2016-06-02T11:47:07.677 回答