在 apache beam 中结合 vs ParDo

Combine vs ParDo in apache beam

我可以知道 Apache Beam 中 ParDo 和 Combine 转换之间的确切区别吗?

我可以将 ParDo 视为 map/shuffle/reduce 中的 Map 阶段,而将 Combine 视为 reduce 阶段吗?

谢谢!

据我了解 Apache Beam,没有明确的 Map 和 Reduce 阶段。

您可以连续应用多个 element-wise 映射函数,其中 ParDo 是最通用的 class,可用于自己的实现。

术语reduce已被聚合取代,相应的class是Combine

MapReduce 仅限于形状为 Map-Shuffle-Reduce 的图,其中 Reduce 是一个元素操作,就像 map 一样,仅通过跟随 shuffle 来区分。

在 Apache Beam 中,可以有任意拓扑,例如

Map-Map-Shuffle-Map-Shuffle-Map-Map-Shuffle-Map

因此,通过 shuffle 之后的内容来分解阶段的概念不再成立。 (Beam 分别调用 Map/Shuffle ParDo 和 GroupByKey。)

Combine 操作是一种特殊的 Map 操作,已知是关联的(想想 summax 等,但它们可能要复杂得多),这使我们能够推送部分 洗牌之前的工作,例如

Shuffle-Sum

变成

PartialSum-Shuffle-Sum

(大多数 MapReduce 系统也有这个概念,命名为组合或 semi-reducing 或类似的。)

请注意,Beam 的 CombinePerKey 和 GlobalCombine 操作将混洗与 CombineFn 配对,无需先使用 GroupByKey。