Flink中max和maxBy的区别及使用

这篇具有很好参考价值的文章主要介绍了Flink中max和maxBy的区别及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Flink中max算子和maxBy算子都是用来求取最大值的,下面将结合代码介绍一下它俩的相同点和不同点

  • 相同点

    1. 都是滚动聚合
    2. 都会根据代码的逻辑更新状态中记录的聚合值,并输出
  • 不同点

    1. max算子只会更新最大值的字段,maxBy算子会更新整条数据,下面就结合代码看和结果看一下相同点及区别
  • 测试数据

    小明,M,25
    小花,W,27
    小美,W,29
    小强,M,24
    小刚,M,29
    小A,M,25
    小B,W,27
    小C,W,29
    小D,M,24
    小E,M,29
    
  • max算子

    public static void main(String[] args) throws Exception {
        // 创建流处理环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);
        // 读取数据文件
        DataStreamSource<String> fileStreamSource = env.readTextFile("data/test/user.txt");
        // 现将数据转成Tuple3形式(名,性别,年龄)
        SingleOutputStreamOperator<Tuple3<String, String, Integer>> mapStream = fileStreamSource.map((MapFunction<String, Tuple3<String, String, Integer>>) value -> {
            // 切割字符串
            String[] split = value.split(",");
            // 将Tuple3返回
            return Tuple3.of(split[0], split[1], Integer.parseInt(split[2]));
        }).returns(new TypeHint<Tuple3<String, String, Integer>>() {});
        // 按照性别进行分组
        KeyedStream<Tuple3<String, String, Integer>, String> keyed = mapStream.keyBy(tup -> tup.f1);
        // 使用max算子求最大值
        SingleOutputStreamOperator<Tuple3<String, String, Integer>> maxStream = keyed.max(2);
        // 打印数据
        maxStream.print();
        env.execute();
    
  • 结果

    (小明,M,25)
    (小花,W,27)
    (小花,W,29)
    (小明,M,25)
    (小明,M,29)
    (小明,M,29)
    (小花,W,29)
    (小花,W,29)
    (小明,M,29)
    (小明,M,29)
    
  • maxBy算子

    public static void main(String[] args) throws Exception {
        // 创建流处理环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);
        // 读取数据文件
        DataStreamSource<String> fileStreamSource = env.readTextFile("data/test/user.txt");
        // 现将数据转成Tuple3形式(名,性别,年龄)
        SingleOutputStreamOperator<Tuple3<String, String, Integer>> mapStream = fileStreamSource.map((MapFunction<String, Tuple3<String, String, Integer>>) value -> {
            // 切割字符串
            String[] split = value.split(",");
            // 将Tuple3返回
            return Tuple3.of(split[0], split[1], Integer.parseInt(split[2]));
        }).returns(new TypeHint<Tuple3<String, String, Integer>>() {});
        // 按照性别进行分组
        KeyedStream<Tuple3<String, String, Integer>, String> keyed = mapStream.keyBy(tup -> tup.f1);
        // 使用maxBy算子求最大值
        SingleOutputStreamOperator<Tuple3<String, String, Integer>> maxStream = keyed.maxBy(2);
        // 打印数据
        maxStream.print();
        env.execute();
    }
    
  • 结果

    (小明,M,25)
    (小花,W,27)
    (小美,W,29)
    (小明,M,25)
    (小刚,M,29)
    (小刚,M,29)
    (小美,W,29)
    (小美,W,29)
    (小刚,M,29)
    (小刚,M,29)
    

通过上面的结果数据首先我们就能确认maxmaxBy两个算子都是滚动计算的.
我们再看不同点max算子计算的结果数据前面两个值始终没有发生变化(姓名,性别),变化的只有最后一个最大值,而maxBy算子则是整条数据都进行了更新,而且通过结果我们可以知道maxBy算子再获取最大值时,只有大于状态中记录的数据时才会更新整条数据,小于等于是不进行更新的.文章来源地址https://www.toymoban.com/news/detail-502330.html

到了这里,关于Flink中max和maxBy的区别及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从Flink的Kafka消费者看算子联合列表状态的使用

    算子的联合列表状态是平时使用的比较少的一种状态,本文通过kafka的消费者实现来看一下怎么使用算子列表联合状态 首先我们看一下算子联合列表状态的在进行故障恢复或者从某个保存点进行扩缩容启动应用时状态的恢复情况 算子联合列表状态主要由这两个方法处理: 1初

    2024年02月08日
    浏览(37)
  • 【大数据】什么是Flink?Flink能用来做什么?

    Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 Apache Flink 功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化、精密的

    2024年02月04日
    浏览(47)
  • Flink源算子、转换算子和输出算子(DataSet)

    Flink是一种一站式处理的框架,既可以进行批处理(DataSet),也可以进行流处理(DataStream) 将Flink的算子分为两大类:DataSet 和 DataStream 1.1 fromCollection 从本地集合读取数据 1.2 readTextFile 从文件中读取 1.3 readTextFile 遍历目录 对一个文件目录内的所有文件,包括所有子目录中的

    2024年04月23日
    浏览(39)
  • 【Flink-1.17-教程】-【四】Flink DataStream API(2)转换算子(Transformation)【基本转换算子、聚合算子】

    数据源读入数据之后,我们就可以使用各种转换算子,将一个或多个 DataStream 转换为新的 DataStream。 map 是大家非常熟悉的大数据操作算子,主要用于将数据流中的数据进行转换,形成新的数据流。简单来说,就是一个 “一 一映射”,消费一个元素就产出一个元素 。 我们只

    2024年01月23日
    浏览(49)
  • [flink 实时流基础]源算子和转换算子

    Flink可以从各种来源获取数据,然后构建DataStream进行转换处理。一般将数据的输入来源称为数据源(data source),而读取数据的算子就是源算子(source operator)。所以,source就是我们整个处理程序的输入端。 在Flink1.12以前,旧的添加source的方式,是调用执行环境的addSource()方

    2024年04月11日
    浏览(45)
  • Flink---5、聚合算子、用户自定义函数、物理分区算子、分流、合流

                           星光下的赶路人star的个人主页                        欲买桂花同载酒,终不似,少年游 计算的结果不仅依赖当前数据,还跟之前的数据有关,相当于要把所有数据聚在一起进行汇总合并—这就是

    2024年02月07日
    浏览(46)
  • Flink基础概念-算子

    Flink的核心目标,是\\\"数据流上的有状态计算\\\"。 具体说明:ApacheFlink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。 无界数据流 例如从Kafka这样的消息组件中读取的数据一般,没有数据流结束的定义,即使没有数据也在进行消费。 有界数据流 有界数据

    2024年02月03日
    浏览(45)
  • Flink之窗口聚合算子

    1.窗口聚合算子 在Flink中窗口聚合算子主要分类两类 滚动聚合算子(增量聚合) 全窗口聚合算子(全量聚合) 1.1 滚动聚合算子 滚动聚合算子一次只处理一条数据,通过算子中的累加器对聚合结果进行更新,当窗口触发时再从累加器中取结果数据,一般使用算子如下: aggregate max maxBy

    2024年02月07日
    浏览(45)
  • Flink - souce算子

    水善利万物而不争,处众人之所恶,故几于道💦   1. 从Java的集合中读取数据   2. 从本地文件中读取数据   3. 从HDFS中读取数据   4. 从Socket中读取数据   5. 从Kafka中读取数据   6. 自定义Source 官方文档 - Flink1.13 fromCollection(waterSensors) 运行结果: readTextFile(“inpu

    2024年02月14日
    浏览(39)
  • Flink - sink算子

    水善利万物而不争,处众人之所恶,故几于道💦   1. Kafka_Sink   2. Kafka_Sink - 自定义序列化器   3. Redis_Sink_String   4. Redis_Sink_list   5. Redis_Sink_set   6. Redis_Sink_hash   7. 有界流数据写入到ES   8. 无界流数据写入到ES   9. 自定义sink - mysql_Sink   10. Jdbc_Sink 官方

    2024年02月14日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包