如何通过一些评估拆分PCollection?
让我说:
messages = (gcp | beam.io.ReadFromPubSub(topic=None, subscription=SUBSCRIPTION, with_attributes=True))
现在我想将邮件分为两个PCollection:
split = messages | beam.Split(function())
split是一个PCollections数组,按我的函数中定义的内容进行拆分。
除了分区,我找不到能做到这一点的任何东西,但似乎只是将它随意地分成多个存储桶,而没有某些功能来确定行进去的地方。
答案 0 :(得分:1)
我认为分区确实是您想要的。如果我们查看记录在Core Beam Transforms(4.2.6)附近的Partition函数,我们发现该转换将作为输入:
该函数对PCollection中的每个元素都调用一次,并返回一个数字索引,用于将该元素放入哪个分区中。例如,如果您有两种输出可能性,那么您想要的分区数将是两个。然后将为每个元素调用函数,并针对每个元素评估一个表达式。如果表达式为true,则返回0将该元素放置在第一个分区中;如果表达式为false,则返回1将该元素放置在第二个分区中。现在,已将PCollection分为两个不同的分区,这些分区由函数逻辑的性质决定。