具体来说,Beam中的Flatten
PTransform是否执行任何类型的:
- 重复数据消除
- 过滤
- 清除现有元素
或者它只是"合并"了两个不同的PCollection?
Flatten
转换不执行任何类型的重复数据消除或过滤。如前所述,它只是将多个PCollection合并为一个包含每个输入元素的PCollection。
这意味着:
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]
。
注意元素4
如何在c1
中出现一次,在c2
中出现两次。这不会以任何方式进行重复数据消除、筛选或删除。
关于Flatten
,一个奇怪的事实是,一些运行程序对其进行了优化,并简单地在两个分支中添加下游变换。因此,简而言之,没有特殊的过滤或重复数据消除。简单地合并PCollections。