在 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 操作,已知是关联的(想想 sum
、max
等,但它们可能要复杂得多),这使我们能够推送部分在 洗牌之前的工作,例如
Shuffle-Sum
变成
PartialSum-Shuffle-Sum
(大多数 MapReduce 系统也有这个概念,命名为组合或 semi-reducing 或类似的。)
请注意,Beam 的 CombinePerKey 和 GlobalCombine 操作将混洗与 CombineFn 配对,无需先使用 GroupByKey。
我可以知道 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 操作,已知是关联的(想想 sum
、max
等,但它们可能要复杂得多),这使我们能够推送部分在 洗牌之前的工作,例如
Shuffle-Sum
变成
PartialSum-Shuffle-Sum
(大多数 MapReduce 系统也有这个概念,命名为组合或 semi-reducing 或类似的。)
请注意,Beam 的 CombinePerKey 和 GlobalCombine 操作将混洗与 CombineFn 配对,无需先使用 GroupByKey。