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的每个字段以及字段对应的序列化类型都包装进去

相关文章:
java Flink(四十二)Flink的序列化以及TypeInformation介绍(源码分析)
Flink的TypeInformation以及序列化 TypeInformation主要作用是为了在 Flink系统内有效地对数据结构类型进行管理,能够在分布式计算过程中对数据的类型进行管理和推断。同时基于对数据的类型信息管理,Flink内部对数据存储也进行了相应的性能优化。 Flin…...
社科赛斯考研:二十二载岁月铸辉煌,穿越周期的生命力之源
在考研培训行业的浩瀚海洋中,社科赛斯考研犹如一艘稳健的巨轮,历经二十二载风礼,依然破浪前行。在考研市场竞争白热化与学生对于考研机构要求越来越高的双重影响下,社科赛斯考研却以一种分蘖成长的姿态,扎根、壮大&…...
【视频图像取证篇】模糊图像增强技术之锐化类滤波场景应用小结
【视频图像取证篇】模糊图像增强技术之锐化类滤波场景应用小结 模糊图像增强技术之锐化类滤波场景应用小结—【蘇小沐】 (一)锐化类滤波器 模糊消除类滤波器(Remove blur / Unsharpness)。 通用去模糊滤波器:针对大…...
win10 禁止谷歌浏览器自动更新(操作贼简单)
禁止谷歌浏览器自动更新 (1)修改 "C:\Windows\System32\drivers\etc\hosts 文件,在最后增加 127.0.0.1 update.googleapis.com(2)保存后,winr 快捷键,输入cmd ,打开命令行 &am…...
LeetCode每日一题【24. 两两交换链表中的节点】
思路:先创建虚拟头结点,再用双指针,两两交换 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr…...
jeecg启动Sentinel 一直是空白页面 解决办法用 外部 Sentinel SpringCloud之Sentinel概述和安装及简单整合
jeecg启动Sentinel 一直是空白页面 解决办法用 外部 Sentinel SpringCloud之Sentinel概述和安装及简单整合 文章目录 jeecg启动Sentinel 一直是空白页面 解决办法用 外部 Sentinel SpringCloud之Sentinel概述和安装及简单整合 Sentinel概述基本介绍 Sentinel安装下载地址: http…...
易基因:人类大脑的单细胞DNA甲基化和3D基因组结构|Science
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 高通通量表观基因组分析技术可用于阐明大脑中细胞复杂性的基因调控程序。5-甲基胞嘧啶 (5mCs)是哺乳动物基因组中最常见的修饰碱基,大多数5mCs发生在胞嘧啶-鸟嘌呤二核苷酸&a…...
Nginx中设置反向代理
在Nginx中设置反向代理,你需要使用proxy_pass指令。以下是一个简单的配置示例,它将Nginx配置为反向代理,将进入的流量转发到在本地运行的Web服务器上。 nginx http { server { listen 80; location / {proxy_pass http://localhost:8080;pro…...
无线局域网——wlan
目录 一.wlan的含义和发展 二.wlan技术带来的挑战 1.企业办公场景多样 2.位置速度的要求 3.安全的要求 4.规范的挑战 三.家庭和企业不同的部署需求 1.胖AP模式组网 2.AC瘦AP模式组网 3.组网模式的不同 四.三层隧道转发实验 1.拓扑 2.AP上线 核心交换机vlan 编辑…...
ASP.NET 服务器控件
目录 一、使用的软件 1、下载 2、新建文件(写一个简单的web网页) 二、相关知识点 1、Web窗体网页的组件 (1)可视化组件 (2)用户接口逻辑 2、Web Form网页的代码模型 (1)单文件…...
[数据集][目标检测]麻雀检测数据集VOC+YOLO格式1157张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1157 标注数量(xml文件个数):1157 标注数量(txt文件个数):1157 标注…...
嵌入式学习第二十九天!(数据结构的概念、单向链表)
数据结构: 1. 定义: 一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据) 1. 程序设计: 将现实中大量而复杂的问题以特定的数据类型和特定的数据结构存储在内存中,并在此基础上实现某个特定的功…...
【ZooKeeper】2、安装
本文基于 Apache ZooKeeper Release 3.7.0 版本书写 作于 2022年3月6日 14:22:11 转载请声明 下载zookeeper安装包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz解压 tar -zxvf apache-zookeeper-3.7.0-b…...
通过Pytest 多数据库连接实例了解Python工厂模式与单例模式的区别
1. 前言 在做自动化测试时,有些特殊项目需要连接不同的数据库进行造数或者断言。自动化框架中,一般使用Pytest yaml 数据驱动的居多,如果一个项目中有上百条数据库相关测试用例,在数据库测试时,如果设计不合理的连接模…...
超拟人语音合成上线,打造有温度的交互新体验
语言使得人类可以构建共同想象的现实,即共同的信念,从而进行大规模团结合作,这是认知革命赋予人类力量的核心。在《人类简史》中,语言被描述成为人类进化的关键力量,而语音的能力是推动语言逐渐进化的火花。 人工智能…...
word 及PPT 中修改公式字体
主要参考: 1.word修改公式默认字体并打出漂亮公式_word 公式 字体-CSDN博客 2.word 使用数学公式字体 在2中 提供的 链接下载字体,或者可以在这里直接下载,下载链接: https://www.lanzoub.com/iNt3g1rs3w0h 密码:a52p 然后按…...
将数据转换成xml格式的文档并下载
现在有一个实体类对象的集合,需要将它们转换为xml文档,xml文档就是标签集合的嵌套,例如一个学生类,有姓名、年龄等,需要转换成一下效果: <student><age>14</age><name>张三</na…...
深入理解与实践AB测试:从理论到实战案例解析
一、引言 在互联网产品优化和运营策略制定中,AB测试(也称为分组测试或随机化对照实验)是一种科学且严谨的方法。它通过将用户群体随机分配至不同的实验组(通常是A组和B组),对比不同版本的产品或策略对关键…...
flask之请求钩子
请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子: 1、before_first_request: 在第一次请求处理之前先被执行 2、before_request: 在每次请求前执行 3、after_request: 在每次请求处理之后被执行 接受一个参数:视图函数的响应在…...
COPY requires at least two arguments, docker COPY 报错
COPY requires at least two arguments # 使用 Node.js 12.16.0FROM node:12.16.0WORKDIR /appCOPY ..原因:Dockerfile文件COPY后的两个. 要加空格 本内容来源于小豆包,想要更多内容请跳转小豆包 》...
前端架构设计模式
前端架构设计模式:构建高效可维护的现代Web应用 在快速迭代的Web开发领域,前端架构设计模式是提升代码质量、团队协作和长期维护性的关键。随着单页应用(SPA)和组件化开发的普及,如何选择适合项目的架构模式成为开发者…...
程序员副业变现:技术人的财富自由指南
CSDN程序员副业图谱技术文章大纲程序员副业现状分析当前程序员副业需求背景主流副业类型及收益模式技术能力与副业匹配度分析技术变现核心路径开源项目商业化技术博客与专栏写作在线课程与知识付费外包开发与远程协作副业技术栈工具链内容创作工具(Markdown/Notion&…...
Lychee Rerank MM智能助手场景:支持图文提问的本地化多模态搜索引擎构建指南
Lychee Rerank MM智能助手场景:支持图文提问的本地化多模态搜索引擎构建指南 1. 项目概述与核心价值 Lychee Rerank MM是一个基于Qwen2.5-VL构建的高性能多模态重排序系统,由哈工大(深圳)自然语言处理团队开发。这个系统专门解决…...
GPT-SoVITS快速上手实测:仅需1段录音,打造你的个人语音助手
GPT-SoVITS快速上手实测:仅需1段录音,打造你的个人语音助手 1. 引言:声音克隆技术的新突破 你是否想过,只需要录制一段1分钟的语音,就能让AI完美模仿你的声音?GPT-SoVITS让这个想法变成了现实。这个开源项…...
用Grad-CAM破解YOLOv8黑箱:为什么你的模型总认错物体?(案例演示)
用Grad-CAM破解YOLOv8黑箱:为什么你的模型总认错物体?(案例演示) 当你的YOLOv8模型将哈士奇误判为狼,或是把路灯识别成行人时,问题的根源往往藏在卷积神经网络那些不可见的注意力分布中。本文将通过三个典型…...
When and Why to use Extensions -- VK_KHR_draw_indirect_count
VK_KHR_draw_indirect_count已晋升为 Vulkan 1.2 核心功能每次调用 vkCmdDraw 都会使用一组描述绘制命令的参数。为了批量执行绘制命令,相同的参数会以 VkDrawIndirectCommand 为单位存储在 VkBuffer 中。使用 vkCmdDrawIndirect 可以发起 drawCount 次绘制…...
WiFiPixels:ESP32上轻量级Wi-Fi控制NeoPixel的固件框架
1. 项目概述WiFiPixels 是一个面向嵌入式 LED 控制场景的轻量级网络化固件框架,其核心设计目标是将 NeoPixel(WS2812B 类型)LED 阵列通过 Wi-Fi 接口暴露为可远程寻址、实时更新的像素资源。项目名称 “NeoPixel Wifi WifiPixels” 并非营销…...
Alive2 如何对包含循环的 LLVM 优化进行有界验证
文本解读有界翻译验证:将循环展开指定次数(例如 2 次),只检查在这些展开次数内可能触发的错误。如果错误需要更多迭代才能暴露,则可能漏报。这是一种工程权衡。循环分析:使用 Tarjan-Havlak 算法识别循环及…...
辛顿 | 我习惯了房间里只有我一个人是对的
注:本文为 “辛顿 | 智者历程” 相关合辑。 略作重排,如有内容异常,请看原文。 X 热点|30 年冷板凳,诺贝尔物理学奖得主 Hinton 的 AI 往事 原创 Rika 适道 2024 年 10 月 9 日 11:13 北京 作者:Rika 编辑…...
Vue中手动取消watch监听的最佳实践与实现原理
1. 为什么需要手动取消watch监听 在Vue开发中,watch监听器是我们常用的响应式工具之一。它能够监听数据变化并执行相应的回调函数。但很多开发者可能没有意识到,不当管理watch监听器可能会导致内存泄漏和性能问题。 想象一下这样的场景:你在一…...
