当前位置: 首页 > news >正文

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格式的文档并下载

现在有一个实体类对象的集合&#xff0c;需要将它们转换为xml文档&#xff0c;xml文档就是标签集合的嵌套&#xff0c;例如一个学生类&#xff0c;有姓名、年龄等&#xff0c;需要转换成一下效果&#xff1a; <student><age>14</age><name>张三</na…...

深入理解与实践AB测试:从理论到实战案例解析

一、引言 在互联网产品优化和运营策略制定中&#xff0c;AB测试&#xff08;也称为分组测试或随机化对照实验&#xff09;是一种科学且严谨的方法。它通过将用户群体随机分配至不同的实验组&#xff08;通常是A组和B组&#xff09;&#xff0c;对比不同版本的产品或策略对关键…...

flask之请求钩子

请求钩子是通过装饰器的形式实现&#xff0c;Flask支持如下四种请求钩子&#xff1a; 1、before_first_request: 在第一次请求处理之前先被执行 2、before_request: 在每次请求前执行 3、after_request: 在每次请求处理之后被执行 接受一个参数&#xff1a;视图函数的响应在…...

COPY requires at least two arguments, docker COPY 报错

COPY requires at least two arguments # 使用 Node.js 12.16.0FROM node:12.16.0WORKDIR /appCOPY ..原因&#xff1a;Dockerfile文件COPY后的两个. 要加空格 本内容来源于小豆包&#xff0c;想要更多内容请跳转小豆包 》...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...