我正在将Apache Beam与Cloud Dataflow结合使用。想象成千上万的产品进入管道。经过一些步骤(过滤,映射等)之后,我想按某个字段对数据进行分区。我尝试使用分区转换,但我猜它确实完成了分区。但是,我不知道如何进一步进行。这就是令我困惑的地方:
我的目标是按某个字段对数据进行分区,然后将所有数据写入不同的表。假设分区转换将数据切成18个PCollection,那么应该有18个文件。但是,分区转换返回PCollectionList,并且我无法对其应用TextIO转换。我尝试对其进行迭代,然后将TextIO转换应用于每个PCollection,但是它没有用。
如何在分区转换后将所有部分写入文件?
谢谢,
用于PTransform Partition的函数需要输出元素需要到达的列表的索引。遵循管道应该只是引用该输出。 python中的示例:
with beam.Pipeline() as p:
even, odd = (p | "Create Numbers" >> Create(range(10))
| "Odd or Even" >> Partition(lambda n, partitions: n % 2, 2))
# lambda x,y: which partition fn, number partitions
# even would be when the fn outputs 0, odd when it outputs 1
even | "even write" >> beam.io.textio.WriteToText('Output/Even')
odd | "odd write" >> beam.io.textio.WriteToText('Output/Odd')