发件人: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
代码。