Google cloud dataflow 检查PCollection是否为空-Apache Beam

Google cloud dataflow 检查PCollection是否为空-Apache Beam,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,有没有办法检查PCollection是否为空 我在Dataflow和apachebeam的文档中没有找到任何相关内容。您没有指定使用哪个SDK,所以我假设使用Python。代码很容易移植到Java 您可以应用元素的全局计数,然后通过应用简单比较将数值映射到布尔值。您可以使用pvalue.AsSingleton函数侧向输入此值,如下所示: import apache_beam as beam from apache_beam import pvalue is_empty_check = (you

有没有办法检查PCollection是否为空

我在Dataflow和apachebeam的文档中没有找到任何相关内容。

您没有指定使用哪个SDK,所以我假设使用Python。代码很容易移植到Java

您可以应用元素的全局计数,然后通过应用简单比较将数值映射到布尔值。您可以使用
pvalue.AsSingleton
函数侧向输入此值,如下所示:

import apache_beam as beam
from apache_beam import pvalue

is_empty_check = (your_pcollection
                    | "Count" >> beam.combiners.Count.Globally()
                    | "Is empty?" >> beam.Map(lambda n: n == 0)
                    )

another_pipeline_branch = (
    p
    | beam.Map(do_something, is_empty=pvalue.AsSingleton(is_empty_check))
)
侧面输入的用法如下所示:

def do_something(element, is_empty):
    if is_empty:
        # yes
    else:
        # no

如果不对PCollection应用PTransform(例如Count.global()或Combine.combineFn()),就无法检查PCollection的大小,因为PCollection不像Java SDK中的典型集合

它是对有界或无界数据集合的抽象,其中数据被送入集合中,用于对其应用的操作(例如PTransform)。它也是并行化的(正如类开头的P所示)

因此,您需要一种机制来从每个worker/节点获取元素的计数,并将它们组合起来以获得一个值。在转换结束之前,无法知道它是0还是n。

Count.globally()如何?