我有一个有界的PCollection,但我只想得到第一个X数量的输入,并丢弃其余的。有没有一种方法可以使用Dataflow 2.X/ApacheBeam来做到这一点?
ycggw6v21#
正如@Andrew在他的评论中所解释的那样,也许你可以在Apache Beam中使用Top转换(对于Java或Python)。具体来说,Top.of()函数返回一个 * PTransom * 和一个 PCollection,按比较器转换排序。在这里你可以找到一个简单的使用示例:
Top
Top.of()
PCollection<Student> students = ...; PCollection<List<Student>> top10Students = students.apply(Top.of(10, new CompareStudentsByAvgGrade()));
here是另一个使用Apache Beam Python SDK的例子,它解决了 PCollection 中返回单个元素的问题。
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')
bvuwiixz3#
如果你不关心顺序,只是想要N个项目的样本,那么我认为你应该能够使用beam.combiners.Sample.FixedSizeGlobally,如下所述:https://beam.apache.org/documentation/transforms/python/aggregation/sample/
beam.combiners.Sample.FixedSizeGlobally
3条答案
按热度按时间ycggw6v21#
正如@Andrew在他的评论中所解释的那样,也许你可以在Apache Beam中使用
Top
转换(对于Java或Python)。具体来说,Top.of()
函数返回一个 * PTransom * 和一个 PCollection,按比较器转换排序。在这里你可以找到一个简单的使用示例:
here是另一个使用Apache Beam Python SDK的例子,它解决了 PCollection 中返回单个元素的问题。
juzqafwq2#
对于X元素的随机样本,可以使用内置的Sample转换(对于Python或Java)。
下面是一个示例,展示了如何从100个元素的示例输入中采样10个元素:
bvuwiixz3#
如果你不关心顺序,只是想要N个项目的样本,那么我认为你应该能够使用
beam.combiners.Sample.FixedSizeGlobally
,如下所述:https://beam.apache.org/documentation/transforms/python/aggregation/sample/