Dataflow/ApacheBeam 将输入限制为第一个 X 数量?

问题描述 投票:0回答:3

我有一个有限的 PCollection,但我只想获得第一个 X 数量的输入并丢弃其余的。有没有办法使用 Dataflow 2.X/ApacheBeam 来做到这一点?

java google-cloud-dataflow apache-beam
3个回答
2
投票

正如@Andrew 在他的评论中所解释的那样,也许您可以在 Apache Beam 中使用

Top
转换(对于 JavaPython)。具体来说,
Top.of()
函数返回一个带有 PCollectionPTransform,由比较器变换排序。

在这里你可以找到一个简单的使用示例:

PCollection<Student> students = ...;
PCollection<List<Student>> top10Students = students.apply(Top.of(10, new CompareStudentsByAvgGrade()));

here另一个使用Apache Beam Python SDK的示例,它解决了在PCollection中返回单个元素的事实。


1
投票

对于 X 元素的随机样本,您可以使用内置的样本转换(对于 PythonJava)。

这里是一个示例,展示了如何从 100 个元素的示例输入中采样 10 个元素:

import apache_beam as beam
from apache_beam.transforms.combiners import Sample

with beam.Pipeline(runner='DirectRunner') as p:
    input = p | beam.Create(range(100))
    output = input | Sample.FixedSizeGlobally(10)
    output | beam.io.WriteToText('output')

0
投票

如果您不关心顺序,只想要 N 个项目的样本,那么我认为您应该可以使用

beam.combiners.Sample.FixedSizeGlobally
,如下所述:https://beam.apache.org/documentation/transforms/ python/聚合/样本/

© www.soinside.com 2019 - 2024. All rights reserved.