Flink 1.17教程:聚合算子(Aggregation)之按键分区(keyBy)

2023-11-14

聚合算子(Aggregation)

计算的结果不仅依赖当前数据,还跟之前的数据有关,相当于要把所有数据聚在一起进行汇总合并——这就是所谓的“聚合”(Aggregation),类似于MapReduce中的reduce操作。

按键分区(keyBy)

对于Flink而言,DataStream是没有直接进行聚合的API的。因为我们对海量数据做聚合肯定要进行分区并行处理,这样才能提高效率。所以在Flink中,要做聚合,需要先进行分区;这个操作就是通过keyBy来完成的。
keyBy是聚合前必须要用到的一个算子。keyBy通过指定键(key),可以将一条流从逻辑上划分成不同的分区(partitions)。这里所说的分区,其实就是并行处理的子任务。
基于不同的key,流中的数据将被分配到不同的分区中去;这样一来,所有具有相同的key的数据,都将被发往同一个分区。在这里插入图片描述

在内部,是通过计算key的哈希值(hash code),对分区数进行取模运算来实现的。所以这里key如果是POJO的话,必须要重写hashCode()方法。
keyBy()方法需要传入一个参数,这个参数指定了一个或一组key。有很多不同的方法来指定key:比如对于Tuple数据类型,可以指定字段的位置或者多个位置的组合;对于POJO类型,可以指定字段的名称(String);另外,还可以传入Lambda表达式或者实现一个键选择器(KeySelector),用于说明从数据中提取key的逻辑。
我们可以以id作为key做一个分区操作,代码实现如下:

package com.atguigu.zxl_test;

import com.atguigu.bean.WaterSensor;
import org.apache.flink.api.java.functions.KeySelector;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class TransKeyBy {
    public static void main(String[] args) throws Exception {

        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        DataStreamSource<WaterSensor> stream = env.fromElements(
            new WaterSensor("sensor_1", 1L, 1),
            new WaterSensor("sensor_1", 2L, 2),
            new WaterSensor("sensor_2", 2L, 2),
            new WaterSensor("sensor_3", 3L, 3)
        );

        // 方式一:使用Lambda表达式
        KeyedStream<WaterSensor, String> keyedStream = stream.keyBy(e -> e.id);

        // 添加操作符,例如打印结果  解决报错:No operators defined in streaming topology. Cannot execute.
        keyedStream.print();

        // 方式二:使用匿名类实现KeySelector
        /*KeyedStream<WaterSensor, String> keyedStream1 = stream.keyBy(new KeySelector<WaterSensor, String>() {
            @Override
            public String getKey(WaterSensor e) throws Exception {
                return e.id;
            }
        });

        // 添加操作符,例如打印结果 解决报错:No operators defined in streaming topology. Cannot execute.
        keyedStream1.print();*/

        env.execute();
    }
}

执行结果:
在这里插入图片描述

需要注意的是,keyBy得到的结果将不再是DataStream,而是会将DataStream转换为KeyedStream。KeyedStream可以认为是“分区流”或者“键控流”,它是对DataStream按照key的一个逻辑分区,所以泛型有两个类型:除去当前流中的元素类型外,还需要指定key的类型。
KeyedStream也继承自DataStream,所以基于它的操作也都归属于DataStream API。但它跟之前的转换操作得到的SingleOutputStreamOperator不同,只是一个流的分区操作,并不是一个转换算子。KeyedStream是一个非常重要的数据结构,只有基于它才可以做后续的聚合操作(比如sum,reduce)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flink 1.17教程:聚合算子(Aggregation)之按键分区(keyBy) 的相关文章

  • 客户数量众多,CRM管理系统如何帮助高效客户管理

    随着中型企业客户关系的不断扩大和发展 高效管理日益庞大的客户群体变得至关重要 CRM管理系统就是管理大量客户 维护客户关系的重要工具 然而 市面上CRM系统太多了 想要快速 准确找到一款适合您业务的CRM系统是一项艰巨的任务 多客户中型企业
  • TXT文本删除第一行文本变成空要如何解决呢

    首先大家一起来看下这个TXT文本里面有多行内容 想把开头第一行批量删除不要掉 1 如果是一两个本可以手动删除也很方便哦 如果文本量比较大如几十几 几百个文本大家一直都选用 首助编辑高手 工具去批量操作哦 批量操作可以大大提高工作效率 接来看
  • 培训学习大数据知识有哪些方法

    学习大数据知识是当前非常热门的话题 随着大数据技术的不断发展 越来越多的人开始关注并学习大数据知识 在大数据培训班学习大数据知识是一个非常好的选择 下面我将从制定大数据学习计划 项目实战案例练习 以用为学 与培训班老师多交流等四个方面来详细
  • 民安智库(第三方市场调研公司):餐饮企业顾客满意度调查,赢得口碑的关键

    在餐饮行业 顾客满意度调查是至关重要的一环 通过对顾客的反馈进行调查和分析 可以了解顾客的需求和期望 从而针对性地改进产品和服务 提升顾客满意度和忠诚度 本文将分享民安智库在餐饮企业顾客满意度调查方面的实践经验 在开展顾客满意度调查之前 要
  • 电商数据接口API深度解析

    随着电子商务的快速发展 电商平台之间的竞争也日益激烈 为了在市场中保持领先地位 电商平台需要不断地优化用户体验 提供个性化的服务和精准的推荐 而这一切都离不开数据 电商数据接口API作为一种高效 便捷的数据交互方式 被广泛应用于电商领域 本
  • 现在还有人使用Excel表格做进销存管理吗?

    当然还是有人在使用Excel表格做进销存管理的 比如一些规模小的个体户或小微企业 使用Excel做进销存对这部分群体来说是合理的选择 然而 需要注意的是 随着 企业规模的扩大 Excel的局限性也会显现出来 容易出错 人为操作和数据输入错误
  • 医疗机构如何释放数据要素价值 推动数据资产化

    在智慧医院建设加速的今天 数据已经成为医疗机构核心的资产之一 无论是基于数据的智慧运营决策 还是医疗AI模型训练与推理 都需要大规模数据的利用 在近日国家数据局等17部门联合印发的 数据要素 三年行动计划 2024 2026年 中 要求医疗
  • 数据采集才是MES系统的核心内容

    一 数据采集在MES管理系统中的应用 1 设备数据采集 MES管理系统通过与生产设备的连接 可以实时采集设备运行状态 产量 质量等相关数据 这有助于企业及时掌握设备运行状况 优化设备资源配置 提高设备利用率 2 工艺数据采集 MES管理系统
  • 机器智能与人类智能的合作:认知能力的提升

    1 背景介绍 在过去的几十年里 人工智能 AI 技术的发展取得了显著的进展 从早期的规则引擎和专家系统到现代的深度学习和神经网络 AI已经成功地解决了许多复杂的问题 然而 尽管如此 人工智能仍然远远低于人类智能 人类智能的强大之处在于其认知
  • 机器学习与人类智能的融合:未来趋势与挑战

    1 背景介绍 人工智能 Artificial Intelligence AI 是指一种以计算机程序为代表的智能方法 可以理解 学习和应用人类智能的某些方面 机器学习 Machine Learning ML 是人工智能的一个子领域 它涉及到计
  • 心灵与计算机:解密情感处理

    1 背景介绍 情感处理是人工智能领域中一个重要的研究方向 它旨在使计算机能理解 识别和处理人类的情感 情感处理的主要应用包括情感分析 情感识别 情感挖掘等 随着大数据 深度学习和自然语言处理等技术的发展 情感处理技术已经取得了显著的进展 然
  • 技术管理者的核心能力在哪?

    作为管理者我曾经被下属当面问过 你为什么不写代码 诚然 我最近两年 代码越写越少 会越开越多 但 存在真的合理吗 我的核心能力应该是什么 看了一篇文章 它提出一个观点 技术管理者的核心能力在于技术判断力 通过在技术领域和非技术领域的长期积累
  • 扬帆证券:产业化破题在即 人形机器人超预期演进

    大模型助力下的拐点 特斯拉A股产业链上 两笔重磅出资几乎一起现身 总规划超百亿元 1月4日 拓普集团公告 与宁波经济技能开发区办理委员会签署了 机器人电驱系统研发生产基地项目出资协议书 公司拟出资50亿元 建设机器人核心部件生产基地 此次出
  • Soul App:来一场始于“兴趣”,轻松自在的“零糖”社交吧

    岁末年终 回顾2023年 这一年你都做了什么呢 记不清楚没关系 互联网都帮你记录好了 2023年 B站的年轻人当 所见所闻 刷新自身认知时 往往会发送弹幕 啊 来抒发惊叹 这一年 支付宝 小荷包 的用户中00后占了4成 近一半更开启了 自动
  • 这个很少人知道的零售技巧,却是我最想安利的!

    在当今数字化浪潮的推动下 零售业正在迎来一场革命性的变革 新零售模式的崛起正引领着消费者与商品之间的互动方式发生深刻的变化 在这个变革的前沿 自动售货机作为新零售的一种关键形式 通过智能技术和自动化系统 重新定义了购物体验的边界 客户案例
  • 利用CHAT上传文件的操作

    问CHAT autox js ui 上传框 CHAT回复 上传文件的操作如果是在应用界面中的话 由于Android对于文件权限的限制 你可能不能直接模拟点击选择文件 一般来说有两种常见的解决方案 一种是使用intent来模拟发送一个文件路径
  • 扬帆证券投资者必知:股票配股与增发的区别你清楚吗?

    配股和增发都是股票再融资的方式 不过二者有一定的区别 1 发行对象不同 配股是向原股东发售一定量股票 一般会以低于市价的价格发售 增发是向全体社会公众发行股票 即新老股东都能获得 2 发行前是否需要公告价格 配股会事先公告配股价 配股的定价
  • 【产品兼容认证】WhaleStudio 成功兼容TiDB数据库软件

    平凯星辰和白鲸开源宣布成功完成产品兼容认证 北京 2023年12月27日 平凯星辰 北京 科技有限公司 以下简称平凯星辰 旗下的 TiDB 产品与白鲸开源的 WhaleStudio 已成功完成产品兼容性认证 这一重要合作旨在为全球客户提供更
  • 对中国手机作恶的谷歌,印度CEO先后向三星和苹果低头求饶

    日前苹果与谷歌宣布合作 发布了 Find My Device Network 的草案 旨在规范蓝牙追踪器的使用 在以往苹果和谷歌的生态形成鲜明的壁垒 各走各路 如今双方竟然达成合作 发生了什么事 首先是谷歌安卓系统的市场份额显著下滑 数年来
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告

随机推荐

  • GoLand之学习之路--持续更新

    GoLand之学习之路 持续更新 基础包 time 获取当前时间 Bytes 多个 byte数组合并成一个 byte 高级用法 interface 得到调用者函数名 pprof sync Once 命令行参数实例 使用小技巧 string和
  • H264解码深度解析——DM8168 OMX从H264文件读取一帧数据(do chunking of h264)

    源码来源 TI DM8168 EZSDK OMX examples decode display 基本执行流程如下 Decode GetNextFrameSize H264 ParsingCtx pc 函数源码 加注释 如下 Decode
  • Linux vim使用方式学习纪要

    vim学习 在Linux下工作和学习 离不开vi和vim的使用 巧妙记住各种模式下的各种指令 不仅可以在工作中大大提高效率 还能装一个满分的哔 我比较菜 只会下面最常用的4种模式中的部分组合技能 不过好像在我的开发工作中已经完全足够了 模式
  • C++学习第八篇——字典树

    学习了之前的树状结构 接下来就可以利用树状结构存储数据了 首先什么是字典树 字典树就是利用树的结构按照字典的原理进行存储的数据结构 树的结构我们了解了 字典是什么样的呢 我们通常去查英文单词的时候 往往都是英文字母a b c d x y z
  • JSON传输协议制定

    通常情况下 大到系统与系统间的通信 小到控制器的返回 我们现在都是采用的json传输 但是单单传输需要的数据 往往不能达到对返回结果成功与否的判断 或是出现解析错误 这时候就需要制定一套标准的传输协议 status 字符串 状态码 0 成功
  • 无监督学习和监督学习的区别

    1 什么是无监督学习 无监督学习是机器学习技术中的一类 用于发现数据 中的模式 利用 学习数据的分布或数据与数 据之间的关系被称作无监督学习 2 无监督学习代表算法 1 k means算法 聚类算法 3 什么是监督学习 监督学习描述的任务是
  • c#和sqlserver数据库:第一课 连接

    一 操作步骤 1 下载Microsoft Data SqlClient包 1 右击 依赖项 2 点击 管理NuGet资源包 3 搜索SqlClient 选择第一个点击下载 2 连接步骤 代码 1 构建连接字符串 指定DataSource U
  • 金晟富:6.23黄金原油今日多空怎么看?实时现价单操作布局

    前言导读 不得不感叹时间过的好快 2021转眼六月尾了 一年又过了二分之一 投资 一定要有长远规划 而布局技巧是成功的关键 如果你此时正在纠结亏损 或者这么多策略该跟随哪一单 而这时候 你可以选择观察一下我们群内的操作 实时公开 公明 公平
  • 删除数组内 对象id相同的值。

    删除数组内 对象id相同的值 async arrRepeat data const result data reduce accumulator current gt let exists accumulator find item gt
  • 文本AI3.5的安装和基本用法:轻松掌握

    PC端 1 首先打开Edge浏览器 这个浏览器是windows系统自带的 2 打开扩展管理 gt 查找新的扩展 查找新的扩展 3 输入 侧边栏 国内免费使用 进行搜索 gt 安装 下载后记得要跟上图一下将插件的开关按钮打开 4 简单的使用
  • Java 如何实现 List<String> 的深拷贝?

    对于 List
  • ChatGPT常用指令大全,带你学习ChatGPT

    ChatGPT是一种自然语言处理技术 可以模拟人类对话并回答问题 在使用ChatGPT时 您需要了解一些常用的指令和命令 以便更好地控制ChatGPT的行为和输出 以下是常用的ChatGPT指令大全 手机端示意图 名片交流探讨更多指令与学习
  • 第 46 届世界技能大赛浙江省选拔赛“网络安全“项目C模块任务书

    第46届世界技能大赛浙江省选拔赛 网络安全 项目C模块 夺旗行动 CTF 挑战 第46届世界技能大赛浙江省选拔赛 网络安全 项目C模块 第一部分 WEB 第二部分 CRYPTO 第三部分 REVERSE 第四部分 MISC 第五部分 PWN
  • uniapp 返回上一页并传参

    a页面跳转到b页面 但是b页面需要传值给a页面的操作 方法一 a页面跳转到 b 的方法 onShow uni on update data gt console log data name 张三 console log data age 1
  • 关于PHP的命名空间

    http www php cn php weizijiaocheng 392925 html
  • yolov3项目实战——基于PyTorch实现的目标检测项目实战(附代码)

    一 数据准备 数据准备见 使用精灵标注助手制作yolov3训练数据集 附解析xml代码 本篇文章为项目实战部分 理论部分简析见 YoLov1 YoLov3演变历程 思维导图 二 项目代码部分 1 cfg py CLASS NUM 10 an
  • 技术可行性

    什么是技术可行性 1 技术可行性是指决策的技术和决策方案的技术不能突破组织所拥有的或有关人员所掌握的技术资源条件的边界 编辑
  • db2锁表后如何解锁_DB2死锁的解决过程全记录

    生产环境里使用的数据库是DB2 但是最近频繁出现一个奇怪的死锁现象 某一个select sql 语句总是会出现死锁 按照以往的经验 通常都是update delete之类的更新sql语句会出现死锁的问题 而且这个 select sql 语句
  • Flutter仿抖音点击进入直播间按钮动画实现

    利用flutter仿抖音点击进入直播间动画效果 效果图 对于这个widget 已经封装成插件 供大家依赖使用 askai animation button last version 组件的一些必选属性 const KaiAnimationB
  • Flink 1.17教程:聚合算子(Aggregation)之按键分区(keyBy)

    聚合算子 Aggregation 计算的结果不仅依赖当前数据 还跟之前的数据有关 相当于要把所有数据聚在一起进行汇总合并 这就是所谓的 聚合 Aggregation 类似于MapReduce中的reduce操作 按键分区 keyBy 对于F