Flatten 除了按元素展平集合之外还有其他效果吗?

Does Flatten have any effects other than flattening collections element-wise?

具体来说,Beam 中的 Flatten PTransform 是否执行任何类型的:

还是只是 "merge" 两个不同的 PCollection?

Flatten 转换不执行任何类型的重复数据删除或任何类型的过滤。如前所述,它只是 将多个 PCollections 合并为一个包含每个输入的元素的集合。

这意味着:

with beam.Pipeline() as p:
    c1 = p | "Branch1" >> beam.Create([1, 2, 3, 4])
    c2 = p | "Branch2" >> beam.Create([4, 4, 5, 6])

    result = (c1, c2) | beam.Flatten()

在这种情况下,result PCollection 包含以下元素:[1, 2, 3, 4, 4, 4, 5, 6]

请注意元素 4c1 中出现一次,在 c2 中出现两次。这不会以任何方式进行重复数据删除、过滤或删除。

作为关于 Flatten 的一个奇怪事实,一些跑步者将其优化掉,并简单地在两个分支中添加下游转换。所以,简而言之,没有特殊的过滤或去重。简单地合并 PCollections.