java 数据流/ApacheBeam限制输入到第一个X数量?

cbjzeqam  于 2023-05-21  发布在  Java
关注(0)|答案(3)|浏览(113)

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

ycggw6v2

ycggw6v21#

正如@Andrew在他的评论中所解释的那样,也许你可以在Apache Beam中使用Top转换(对于Java或Python)。具体来说,Top.of()函数返回一个 * PTransom * 和一个 PCollection,按比较器转换排序。
在这里你可以找到一个简单的使用示例:

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

here是另一个使用Apache Beam Python SDK的例子,它解决了 PCollection 中返回单个元素的问题。

juzqafwq

juzqafwq2#

对于X元素的随机样本,可以使用内置的Sample转换(对于Python或Java)。
下面是一个示例,展示了如何从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')
bvuwiixz

bvuwiixz3#

如果你不关心顺序,只是想要N个项目的样本,那么我认为你应该能够使用beam.combiners.Sample.FixedSizeGlobally,如下所述:https://beam.apache.org/documentation/transforms/python/aggregation/sample/

相关问题