防止 Google Dataflow 融合的最佳方法?

Max*_*ian 4 google-cloud-dataflow

来自:https : //cloud.google.com/dataflow/service/dataflow-service-desc#preventing-fusion

您可以在第一个 ParDo 之后插入 GroupByKey 并取消组合。Dataflow 服务从不融合聚合中的 ParDo 操作。

这就是我在 python 中提出的 - 这是否合理/有更简单的方法吗?

def prevent_fuse(collection):
    return (
        collection
        | beam.Map(lambda x: (x, 1))
        | beam.GroupByKey()
        | beam.FlatMap(lambda x: (x[0] for v in x[1]))
        )
Run Code Online (Sandbox Code Playgroud)

编辑,回应本钱伯斯的问题

我们想要防止融合,因为我们有一个生成更大集合的集合,我们需要跨更大集合的并行化。如果它融合了,我只能在更大的集合中找到一名工人。

use*_*967 5

Apache Beam SDK 2.3.0 添加了实验性Reshuffle转换,这是Reshuffle.viaRandomKey@BenChambers 提到的操作的 Python 替代方案。您可以使用它代替自定义prevent_fuse代码。