java Flink(四十二)Flink的序列化以及TypeInformation介绍(源码分析)

Flink的TypeInformation以及序列化

TypeInformation主要作用是为了在 Flink系统内有效地对数据结构类型进行管理,能够在分布式计算过程中对数据的类型进行管理和推断。同时基于对数据的类型信息管理,Flink内部对数据存储也进行了相应的性能优化。

Flink 数据类型 & TypeInformation信息_flink typeinformation-CSDN博客

每一个具体的数据类型都对应一个TypeInformation的具体实现,每一个TypeInformation都会为对应的具体数据类型提供一个专属的序列化器。通过 Flink的序列化过程图可以看到TypeInformation会提供一个createSerialize()方法,通过这个方法就可以得到该类型进行数据序列化操作与反序化操作的对象TypeSerializer。
Flink 数据序列化_flink的序列化-CSDN博客

可以看出,TypeInformation在flink的序列化中起了很重要的作用

源码分析

Basic类型

Flink建议通过Pojo进行数据传入,如果传入的数据类型不满足Pojo条件或者不是Flink支持的基础类型,那么就会通过Kryo进行序列化,效率较低

创建一个包含给定元素的新数据流。元素都必须是相同的类型

(先看基本类型的数据传入)

ctrl+左键点击进入

TypeExtractor:一种用于对类进行反射分析的实用程序,用于确定转换函数实现的返回类型。

初始化 TypeInformation 根据数据第一个元素进行判断返回类型

 传入第一个元素

 

 ctrl+左键点击红框方法进入

如果用于此类型或超类型,则使用工厂创建类型信息。否则返回null。

检查我们是否可以从元组中提取类型,否则使用该类

同上,如果是Row类型,则进入该代码块 

 显然我们这次的例子是Basic 中的String类型,所以进入 privateGetForClass

从给定的类(如Integer、String[]或POJO)中创建类型信息。

检查是否可以使用工厂生产类型信息

 对象作为泛型类型信息处理,这里返回的 GenericTypeInfo 就是Flink定义的泛型类型的TypeInfo

如果类型满足,则返回泛型

 如果类型为数组,则进入

如果类型为hadoop writable则进入

 

如果是Basic类型的一种,则命中

显然我们的String类型数据命中了Basic

一路返回到 fromElements,typeInfo里的信息包含了选择序列化的类型

 进入fromCollection:从给定的非空集合创建数据流。

 不能有null元素和混合元素

 最终返回的DataStreamSource数据,typeInfo数据被封装到了其中

Pojo类型

 跟Basic类一样,一步一步进入到privateGetForClass

经过一堆判断,都没有命中后走到pojo类判断

 

判断必须是Public类型类

不能全都是static或者transient字段

  循环读取每个field,字段必须有Get、Set方法

 每个字段创建对应的typeInfo添加到pojoFields

 最后返回的DataStream,可以看到Pojo的每个字段以及字段对应的序列化类型都包装进去

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/477573.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins安装 Linux 更换镜像 安装插件

Jenkins安装 Linux 更换镜像 安装插件 前言 下面叙述了三种jenkins安装的方式,jenkins安装之前必须有java环境因为他是java写的… yum安装只能安装最新版本的jenkins,但是jenkins是java写的所以他强依赖java版本,当你的服务器的java版本与jenkins版本冲突时还需要给jenkins重…

2024.3.21作业

#include<myhead.h>//封装添加学生信息函数 int do_add(sqlite3 *ppDb) {//准备sql语句int add_numb 0;char add_name[20] "";double add_score 0;//提示并输入数据printf("请输入学号&#xff1a;");scanf("%d", &add_numb);print…

spring-boot如何启动WEB项目之二

文章目录 概要spring-boot项目结构踩坑1踩坑2踩坑3总结 概要 最近在做信创的项目&#xff0c;需要将原来在tomcat启动的项目&#xff0c;转移为微服务的项目&#xff0c;然后由于对spring-boot项目了解不足&#xff0c;导致耗费了一些时间来启动项目。 spring-boot项目结构 每…

YoloV8改进策略:Block改进|PKINet

摘要 PKINet是面向遥感旋转框的主干&#xff0c;网络包含了CAA、PKI等模块&#xff0c;给我们改进卷积结构的模型带来了很多启发。 论文&#xff1a;《Poly Kernel Inception Network在遥感检测中的应用》 https://export.arxiv.org/pdf/2403.06258 遥感图像&#xff08;RSI…

应用APM-如何配置Prometheus + Grafana监控springboot应用

文章目录 概述在Spring Boot应用中集成Micrometerspringboot配置修改 Docker安装Prometheus和Grafanaprometheus配置grafana配置启动Prometheus和Grafana在Grafana中配置数据源创建Grafana仪表盘配置Grafana告警&#xff08;可选&#xff09;监控和分析 概述 配置Prometheus和…

内网如何访问其他电脑?

在现代信息技术时代&#xff0c;人们对于与其他电脑进行内网访问的需求日益增长。不同地区的电脑与设备之间的信息远程通信问题成为了一个亟待解决的难题。幸运的是我们有一些解决方案&#xff0c;其中包括【天联】组网技术。 【天联】组网技术 【天联】组网技术是一种解决不同…

解决GNURadio自定义C++ OOT块-导入块时报错问题

文章目录 前言一、问题描述二、解决方法1、安装依赖2、配置环境变量3、重新编译及安装三、结果1、添加结果2、运行结果前言 本文记录在 GNURadio 自定义 C++ OOT 块后导入块时报错 AttributeError: module myModule has no attribute multDivSelect。 一、问题描述 参考官方教…

C#,图片分层(Layer Bitmap)绘制,反色、高斯模糊及凹凸贴图等处理的高速算法与源程序

1 图像反色Invert 对图像处理的过程中会遇到一些场景需要将图片反色,反色就是取像素的互补色,比如当前像素是0X00FFFF,对其取反色就是0XFFFFFF – 0X00FFFF = 0XFF0000,依次对图像中的每个像素这样做,最后得到的就是原始2 图像的反色。 2 高斯模糊(Gauss Blur)算法 …

ABAP笔记:定义指针,动态指针分配:ASSIGN COMPONENT <N> OF STRUCTURE <结构> TO <指针>.

参考大佬文章学习&#xff0c;总结了下没有提到的点&#xff1a;SAP ABAP指针的6种用法。_abap 指针-CSDN博客 定义指针&#xff1a;其实指针这玩意&#xff0c;就是类似你给个地方&#xff0c;把东西临时放进去&#xff0c;然后指针就是这个东西的替身了&#xff0c;写代码的…

异常机制二

目录 异常的处理方式之一&#xff1a;捕获异常 try-catch-finally 语句块的执行过程&#xff1a; 异常的处理方式之二&#xff1a;声明异常&#xff08;throws 子句&#xff09; 自定义异常 异常的处理方式之一&#xff1a;捕获异常 捕获异常是通过 3 个关键词来实现的&…

【UE5】动画蒙太奇简述

项目资源文末百度网盘自取 动画蒙太奇基本功能 动画蒙太奇&#xff08;Animation Montage&#xff09; 可以将多个 动画序列&#xff08;Animation Sequences&#xff09; 合并为单个资产并通过蓝图播放&#xff0c;还可以将一个蒙太奇动画切分为多个 蒙太奇分段&#xff08;M…

数据结构从入门到精通——二叉树的实现

二叉树的实现 前言一、二叉树链式结构的实现1.1前置说明1.2二叉树的手动创建 二、二叉树的遍历2.1 前序、中序以及后序遍历二叉树前序遍历二叉树中序遍历二叉树后序遍历2.2 层序遍历练习 三、二叉树的具体代码实现二叉树的节点个数二叉树叶子节点个数二叉树第k层节点个数二叉树…

【数字图像处理系列】读取图像

【数字图像处理系列】读取图像 使用函数 imread 可以将图像读人 MATLAB 环境&#xff0c;imread 的语法为 imread(filename)其中&#xff0c;filename是一个含有图像文件全名的字符串(包括任何可用的扩展名)。例如&#xff0c;命令行 >>f imread(pout.tif)将tif图像po…

MATLAB环境下基于振动信号的轴承状态监测和故障诊断

故障预测与健康管理PHM分为故障预测和健康管理与维修两部分&#xff0c;PHM首先借助传感器采集关键零部件的运行状态数据&#xff0c;如振动信号、温度图像、电流电压信号、声音信号及油液分析等&#xff0c;提取设备的运行监测指标&#xff0c;进而实现对设备关键零部件运行状…

精确率(召回率)的权衡(Machine Learning研习十六)

精确率&#xff08;召回率&#xff09;的权衡 为了理解这种权衡&#xff0c;让我们看看 SGDClassifier如何做出分类决策。 对于每个实例&#xff0c;它根据决策函数计算分数。 如果该分数大于阈值&#xff0c;则将该实例分配给正类&#xff1b; 否则它会将其分配给负类。 图 3…

基于SpringBoot+Vue保密信息学科平台系统设计与实现(源码+部署说明+演示视频+源码介绍+lw)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

filezilla客户端的应用以及ftplftpwget的用法

filezilla的应用 用户的配置查看上一篇文章FTP3种用户的配置 进入filezilla软件测试 用yy用户登录发现可以上传下载创建删除 再用cc用户登录发现不能上传不能删除不能创建只能下载 ftp&lftp&wget客户端的应用 以命令行的方式连接ftp&#xff0c;一般只会用到上…

【HTTP完全注解】范围请求

范围请求 范围请求是HTTP的一种内容协商机制&#xff0c;该机制允许客户端只请求资源的部分内容。范围请求在传送大的媒体文件&#xff0c;或者与文件下载的断点续传功能搭配使用时非常有用。 范围请求的工作流程 范围请求通过在HTTP请求标头Range中表明需要请求的部分资源的…

Windows东方通下载及使用

把安装包都拖到桌面来&#xff0c;可以拖一个解压包进去 下载东方通可以不用配环境变量 双击安装包 下一步 点击接受 选择版本&#xff0c;都可以 选择安装路径 下一步 点击安装 改端口号 移到桌面 把安装包里面的文件拖进去 过期了&#xff0c;记得改时间 点击时间面板&…

【回顾练习】静态路由配置综合实验报告

一、分析要求 为R6设备配置公有IP地址&#xff0c;并确保只能进行IP地址配置&#xff0c;无法进行其他配置。为R1-R5设备分配私有IP地址。为R1、R2、R4配置两个环回地址&#xff0c;为R5、R6配置一个环回地址。在R3上配置DHCP服务&#xff0c;以供两台PC自动获取IP地址。使用动…