首页 > 解决方案 > Flink,如果多条记录满足条件,minBy或maxBy的行为是什么

问题描述

我是 Flink 的新手,我想知道如果有多个记录具有最小值,那么 minBy 的行为是什么(猜测 maxBy 是一样的)。我注意到 Flink 在这种情况下只会输出一条记录,但是哪一条呢?第一个,最后一个还是随机的?

感谢帮助。

标签: apache-flinkflink-streaming

解决方案


请注意,从FLIP-134开始,所有这些在 DataStreams 上的关系方法,即Windowed/KeyedStream#sum,min,max,minBy,maxBy计划被弃用。整个 DataSet API 也计划最终被弃用。

对此类关系方法的唯一长期支持是 Table 和 SQL API 提供的。

但是要回答您的问题, minBy 和 maxBy 的工作方式相同。

javadocDataSet#maxBy

如果在指定字段中存在多个具有最大值的值,则会随机选择一个。

而 javadocs for AllWindowedStream#maxBy(int positionToMaxBy)and KeyedStream#maxBy(int positionToMaxBy)say

如果更多元素具有相同的最大值,则运算符默认返回第一个。

AllWindowedStream#maxBy(int positionToMaxBy, boolean first)以及用于AllWindowedStream#maxBy(int positionToMaxBy, boolean first)解释的 javadocs

如果 [first is] true,则运算符返回具有最大值的第一个元素,否则返回最后一个


推荐阅读