Apache Beam:分区转换后如何继续管道?

问题描述 投票:0回答:1

我正在将Apache Beam与Cloud Dataflow结合使用。想象成千上万的产品进入管道。经过一些步骤(过滤,映射等)之后,我想按某个字段对数据进行分区。我尝试使用分区转换,但我猜它确实完成了分区。但是,我不知道如何进一步进行。这就是令我困惑的地方:

我的目标是按某个字段对数据进行分区,然后将所有数据写入不同的表。假设分区转换将数据切成18个PCollection,那么应该有18个文件。但是,分区转换返回PCollectionList,并且我无法对其应用TextIO转换。我尝试对其进行迭代,然后将TextIO转换应用于每个PCollection,但是它没有用。

如何在分区转换后将所有部分写入文件?

谢谢,

java google-cloud-dataflow apache-beam
1个回答
0
投票

用于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')
© www.soinside.com 2019 - 2024. All rights reserved.