发件人:https://cloud.google.com/dataflow/service/dataflow-service-desc#preventing-fusion
You can insert a GroupByKey and ungroup after your first ParDo. The Dataflow service never fuses ParDo operations across an aggregation.
这就是我在 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]))
)
编辑,回应本钱伯斯的问题
我们想要防止融合,因为我们有一个生成更大集合的集合,我们需要跨更大集合进行并行化。如果它融合了,我只能在更大的集合中找到一名 worker 。
最佳答案
Apache Beam SDK 2.3.0 添加了实验性 Reshuffle
转换,这是 Reshuffle.viaRandomKey
的 Python 替代品@BenChambers 提到的操作。您可以使用它代替您的自定义 prevent_fuse
代码。
关于google-cloud-dataflow - 防止 Google Dataflow 融合的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47162365/