我们正在使用 Apache Flink(1.4.2( 进行批处理,出于性能原因,我们希望在输出之前对 100 个项目进行分组,而不是直接输出每个项目。
如果我们要使用DataStream API,我们将能够使用诸如翻转窗口(https://ci.apache.org/projects/flink/flink-docs-release-1.5/dev/stream/operators/windows.html#tumbling-windows(之类的东西。
但这在进行批处理时不可用。
是否可以使用数据集 API 来做到这一点,也许通过一些组/减少功能?
如果记录可以任意批处理在一起,我不会使用groupBy
、reduce
或groupReduce
,因为它们会不必要地对DataSet
进行打乱和排序。
相反,您可以使用MapPartitionFunction
将记录批处理在一起。MapPartition
接收分区所有记录的迭代器,并可以通过收集器发出记录。由于它只使用记录而不重新组织它们(随机排序、排序(,因此非常有效。