您如何根据某些标准拆分 PCollections?

How do you split PCollections by some criterion?

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

假设我有:

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

现在我想将消息分成两个 PCollections:

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

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

除了分区,我找不到任何东西可以做到这一点,但它似乎只是任意地将它分成桶,没有一些功能来确定什么去哪里。

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

  • 一个函数,用于确定 PCollection 中的元素应放入哪个分区。
  • 要使用的分区数。

该函数针对 PCollection 中的每个元素调用一次,并且 return 是一个数字索引,表示将该元素放入哪个分区。例如,如果您有两种输出可能性,那么您想要的分区数就是两个。然后将为每个元素调用您的函数,并针对每个元素计算一个表达式。如果表达式为真,return 0 将该元素放置在第一个分区中,如果表达式为假,则 return 1 将该元素放置在第二个分区中。您现在已将您的 PCollection 分成两个不同的分区,这些分区由您的函数逻辑的性质决定。