Apache Flink 中的JoinFunction
和CoGroupFunction
有什么区别?语义和执行有何不同?
联
接和 CoGroup 转换都联接关键字段上的两个输入。区别在于用户函数的调用方式:
- Join 转换使用来自两个输入的匹配记录对调用
JoinFunction
,这些记录对的关键字段具有相同的值。此行为与相等内联接非常相似。 - CoGroup 转换使用迭代器调用
CoGroupFunction
,这些迭代器对键字段具有相同值的两个输入的所有记录。如果输入没有某个键值的记录,则传递空迭代器。除其他事项外,CoGroup 变换还可用于内部和外部相等连接。因此,它比联接转换更通用。
和哈希的连接策略执行 Join,而 CoGroup 始终使用基于排序的策略执行。因此,联接通常比协组更有效,如果可能,应首选联接。