我有一个有限的PCollection,但我只想得到第一个X量的输入并丢弃其余的。有没有办法使用Dataflow 2.X / ApacheBeam做到这一点?
答案 0 :(得分:2)
正如@Andrew在他的评论中所解释的那样,也许你可以在Apache Beam中使用Top
变换(Java或Python)。具体来说,Top.of()
函数返回带有 PCollection 的 PTransform ,由比较器变换排序。
Here您可以找到一个简单的使用示例:
PCollection<Student> students = ...;
PCollection<List<Student>> top10Students = students.apply(Top.of(10, new CompareStudentsByAvgGrade()));
here另一个使用Apache Beam Python SDK的例子,该例子解决了 PCollection 中返回单个元素的事实。
答案 1 :(得分:0)
对于 X 元素的随机样本,您可以使用内置的样本转换(用于 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')