详解 Flink DataStream中min(),minBy(),max(),max()之间的区别
解释
官方文档中:
The difference between min and minBy is that min returns the minimum value, whereas minBy returns the element that has the minimum value in this field (same for max and maxBy).
翻译:
min和minBy之间的区别是min返回最小值,而minBy返回在此字段中具有最小值的元素(与max和maxBy相同)。
但是事实上,min与max 也会返回整个元素。
不同的是min会根据指定的字段取最小值,并且把这个值保存在对应的位置上,对于其他的字段取了最先获取的值,不能保证每个元素的数值正确,max同理。
而minBy会返回指定字段取最小值的元素,并且会覆盖指定字段小于当前已找到的最小值元素。maxBy同理。
示例论证
先拿min()与minBy()举例:
取第三个元素的最小值
public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); //获取数据源 List data = new ArrayList<Tuple3<Integer,Integer,Integer>>(); data.add(new Tuple3<>(0,2,2)); data.add(new Tuple3<>(0,1,1)); data.add(new Tuple3<>(0,5,6)); data.add(new Tuple3<>(0,3,5)); data.add(new Tuple3<>(1,1,9)); data.add(new Tuple3<>(1,2,8)); data.add(new Tuple3<>(1,3,10)); data.add(new Tuple3<>(1,2,9)); DataStreamSource<Tuple3<Integer,Integer,Integer>> items = env.fromCollection(data); items.keyBy(0).min(2).print(); env.execute("defined streaming source"); }
输出结果:
(0,2,2) (0,2,1) (0,2,1) (0,2,1) (1,1,9) (1,1,8) (1,1,8) (1,1,8)
可以看到返回的元素第二个字段取的是获取到第一个元素的字段值; 往下找,第二个元素的指定值是最小的,则把这个值保存的对应位置。
接下来再看minBy()的运行结果:
(0,2,2) (0,1,1) (0,1,1) (0,1,1) (1,1,9) (1,2,8) (1,2,8) (1,2,8)
返回的是指定字段最小值的元素。可以看到元素数值的正确。
当然max(),maxBy同理。
更多文章:www.ipooli.com

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android 的这 13 道 ContentProvider 面试题,你都会了吗?
前言 作为 Android 的四大组件之一,ContentProvider 可以说是无处不在了。 但是对于我而言,开发过程中看似 ContentProvider 用得很娴熟,却一直没能形成一个完整的体系。 也许大家也有着和我类似的烦恼,于是我特地花了几天的时间,总结了我所知道的知识点,以及面试中可能遇到的问题。将本文分享给大家,希望能帮助大家重新梳理下我们的这个老朋友 ContentProvider 。 希望大家阅读愉快! 文章目录 ContentProvider 应用程序间非常通用的共享数据的一种方式,也是 Android 官方推荐的方式。 Android 中许多系统应用都使用该方式实现数据共享,比如通讯录、短信等。 1.1 Android 为什么要设计 ContentProvider 这个组件? 很多做 Android 开发的人都不怎么使用它,觉得直接读取数据库会更简单方便。 那么 Android 搞一个内容提供者在数据和应用之间,只是为了装高大上,故弄玄虚?我认为其设计用意在于: 封装。对数据进行封装,提供统一的接口,使用者完全不必关心这些数据是在 DB ,XML 、Prefer...
- 下一篇
代理项 Surrogate
概述 代理项(Surrogate),是一种仅在 UTF-16 中用来表示补充字符的方法。在 UTF-16 中,为补充字符分配两个 16 位的 Unicode 代码单元: 第一个代码单元,被称为高代理项代码单元或前导代码单元; 第二个代码单元,被称为低代理项代码单元或尾随代码单元。 这两个代码单元组合在一起,就被称为代理项对。 相关术语 为了能更好地理解“代理项”这一概念,就需要先了解相关的 Unicode 术语:1 代码点(Code Point): Unicode 代码空间中的任何值,即从 0 到 10FFFF~16~ 的整数范围。但并非所有代码点都分配给编码字符。 一个字符在任何编码字符集中的值或位置。 代码单元(Code Unit):最小的数位组合,可以表示用于处理或交换的编码文本的单位。在 Unicode 标准中,UTF-8 编码格式采用 8 位编码单元,UTF-16 编码格式采用 16 位编码单元,UTF-32 编码格式采用 32 位编码单元。 BMP 字符(BMP Character):位于 BMP(Basic Multilingual Plane,多语种基本面)代码点的 U...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群