我有兴趣使用Apache Flink有效地将两个数据流压缩在一起(但同样的问题也可能适用于数据集)。
作为一个例子(使用Scala表示法)我有
names: DataStream[String]
ages: DataStream[Int]
我想获得
combined: DataStream[(String, Int)]
使用流内数据的位置隐式地进行连接(非正式地:combined(i) = (names(i), ages(i))
)。我可以通过向每个流添加“位置”字段然后使用位置作为键将它们连接在一起来获得此功能,但这是非常低效的。
有没有更好的方法呢?谢谢!
答案 0 :(得分:0)
您可以使用自定义CoFlatMap
功能。为此,您还需要两个内部FIFO缓冲区,因为两种映射方法都将以不可预测的顺序调用(取决于两个输入的数据是否可用)。
因此,您的算法将如下工作(两个地图函数的算法相同):
当然,您可以对此算法应用更多优化 - 此版本仅说明了主要想法。