排序并限制在 apache-beam/google-cloud-dataflow

Sort and limit in apache-beam/google-cloud-dataflow

假设我有以下格式的 PCollection:

-----------------------------------------
|   sale_id |   product_id  |   amount  |
|-----------|---------------|-----------|
|     1     |       a       |     1     |
|-----------|---------------|-----------|
|     2     |       b       |     12    |
|-----------|---------------|-----------|
|     3     |       c       |     3     |
|-----------|---------------|-----------|
|     4     |       d       |     100   |
|-----------|---------------|-----------|
|     5     |       e       |     4     |
-----------------------------------------

我的目标是只过滤X条畅销书记录,即按金额排序,限制X

在 apache beam 中有什么方法可以实现?

谢谢!

更新:

BeamSQL[2] 支持 "ORDER BY LIMIT",如果你想尝试的话。


如果您正在使用 Java SDK,您可以使用内置的 TOP 转换[1] 来执行 ORDER BY LIMIT。 TOP 转换允许 DESC 和 ASC。

如果您使用的是没有TOP的SDK,您可以随时参考TOP的实现来编写自己的。

1:https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Top.java

2.https://beam.apache.org/documentation/dsls/sql/overview/