Dataflow / ApacheBeam限制输入到第一个X量?

时间:2018-03-30 17:57:06

标签: java google-cloud-dataflow apache-beam

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

2 个答案:

答案 0 :(得分:2)

正如@Andrew在他的评论中所解释的那样,也许你可以在Apache Beam中使用Top变换(JavaPython)。具体来说,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 元素的随机样本,您可以使用内置的样本转换(用于 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')