首页 > 解决方案 > 如何使用 Apache Beam Python SDK 使用 ParDo 过滤 PCollection 的元素

问题描述

我有一个 PCollection,我想使用 ParDo 从中过滤掉一些元素。

有没有地方可以找到这个例子?

标签: google-cloud-dataflowapache-beam

解决方案


在 Apache Beam Python SDK 中,有一个过滤器转换,它接收一个 lambda,并过滤掉所有返回的元素False。这是一个例子:

filtered_collection = (beam.Create([1, 2, 3, 4, 5])
                       beam.Filter(lambda x: x % 2 == 0))

在这种情况下,filtered_collection将是一个PCollection包含2和的4


如果要将其编码为传递给 ParDo 变换的 DoFn,则可以执行以下操作:

class FilteringDoFn(beam.DoFn):
  def process(self, element):
    if element % 2 == 0:
      yield element
    else:
      return  # Return nothing

你可以像这样应用它:

filtered_collection = (beam.Create([1, 2, 3, 4, 5])
                       beam.ParDo(FilteringDoFn()))

其中,和以前一样,filtered_collection是一个PCollection包含2和的 a 4


推荐阅读