发件人:https://cloud.google.com/dataflow/service/dataflow-service-desc#preventing-fusion


您可以在第一个ParDo之后插入GroupByKey并取消分组。数据流服务永远不会在聚合中融合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]))
        )


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

我们要防止融合,因为我们有一个生成大得多的集合的集合,并且我们需要在更大的集合之间进行并行化。如果融合的话,我只会在更大的系列中只有一名工人。

最佳答案

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

10-02 07:55