如何按某些标准拆分PCollection?

时间:2019-05-16 13:30:49

标签: python apache-beam

如何通过一些评估拆分PCollection?

让我说:

  messages = (gcp | beam.io.ReadFromPubSub(topic=None, subscription=SUBSCRIPTION, with_attributes=True))

现在我想将邮件分为两个PCollection:

  split = messages | beam.Split(function())

split是一个PCollections数组,按我的函数中定义的内容进行拆分。

除了分区,我找不到能做到这一点的任何东西,但似乎只是将它随意地分成多个存储桶,而没有某些功能来确定行进去的地方。

1 个答案:

答案 0 :(得分:1)

我认为分区确实是您想要的。如果我们查看记录在Core Beam Transforms(4.2.6)附近的Partition函数,我们发现该转换将作为输入:

  • 确定PCollection中的元素应放置在哪个分区的函数。
  • 要使用的分区数的计数。

该函数对PCollection中的每个元素都调用一次,并返回一个数字索引,用于将该元素放入哪个分区中。例如,如果您有两种输出可能性,那么您想要的分区数将是两个。然后将为每个元素调用函数,并针对每个元素评估一个表达式。如果表达式为true,则返回0将该元素放置在第一个分区中;如果表达式为false,则返回1将该元素放置在第二个分区中。现在,已将PCollection分为两个不同的分区,这些分区由函数逻辑的性质决定。