Flink 的GroupCombine
文档指出:
注意:分组数据集上的 GroupCombine 是在内存中以贪婪策略执行的,该策略可能不会一次处理所有数据,而是分多个步骤处理。它也在各个分区上执行,无需像在 GroupReduce 转换中那样进行数据交换。这可能会导致部分结果。
对于完整(非分组(DataSet
,使用以下备注:
完整数据集上的 GroupCombine 的工作方式类似于分组数据集上的 GroupCombe。数据在所有节点上分区,然后以贪婪的方式组合(即一次只组合适合内存的数据(。
这是否意味着,如果我的数据集包含,例如:
1
2
3
我想生成所有成对组合
(1, 2), (1, 3), (2, 3)
我无法通过GroupCombine
转换以一般方式实现这一点,因为它不能保证整个组适合给定分区的内存?
GroupCombine
是 Flink 中的非确定性操作。它通常用于执行部分计算(如聚合(,然后是使用部分结果的确定性操作(如GroupReduce
(。GroupCombine
通常用于通过执行成本较低的本地内存计算来降低确定性操作的成本。
如果需要计算记录组的确定性结果,则应使用GroupReduce
。