flink支持的数据类型讲解(可序列化) 和 内置累加器的运用
flink支持的数据类型
Flink对DataSet和DataStream中可使用的类型加了一些约束。原因是系统可以通过分析这些类型来确定有效的执行策略和选择不同的序列化方式。有7种不同的数据类型:
1.java Tuple 和 Scala Case类:
2.java POJO
(指那些没有从任何类集成,也没有实现任何接口,更没有被其他框架侵入的java对象
1.是公共类 2.无参构造是公共的 3.所有的属性是可获得的 4.自断必须是flink支持的。Flink会用Avro来序列化任意对象。Flink会分析POJO类型结构获知POJO字段。POJO类型比一般类型好用。此外,Flink访问POJO要比一般类型更高效)
3.基本类型
Flink支持java和scala所有的基本数据类型,比如integer,String和Double
4.通用类
Flink支持大多数的java scala类,包含不能序列化字段的类在增加一些限制后也可以支持。遵循java Bean规范的类一般都可以使用
所有不能视为POJO的类Flink都会当做一般类处理。这些数据类型被视作黑箱,其内容是不可见的。通用类使用Kryo进行序列化和反序列化
5.值
通过实现org.apache.flinktypes.Value接口的read和write方法提供自定义代码来序列化和反序列化,而不是使用通用的序列化框架
Flink预定义的值类型与原生数据类型是一一对应的(例如:ByteValue,ShortValue,IntValue,LongValue,FloatValue,DoubleValue,StringValue,Char
Value,BooleanValue)。这些值类型作为原生数据类型的可变变体,他们的值是可以改变的。允许程序重用对象从而缓解GC压力
6.hadoop Writables
7.特殊类型
scala的Either Option和try
java API有自己Either实现
延伸支持
java 范型的类型擦除机制
Flink累加器的实现
累加器的内置类型(计数)IntCounter,LongCounter和DoubleCounter
Histogram
如何使用累加器
一.在自定义的转换操作里面创建累加器对象
private IntCounter numLines=new IntCounter();
二.注册累加器对象,通常在rich function的open()方法中。这里你还需要定义累加器的名字
(继承RichFlatMapFunction实现open和close方法,只执行一次里面进行注册)
getRuntimeContext().addAccumlator("num-lines",this.numLines)
三.在operator函数的任何地方使用累加器,包括在open()和close()方法中
this.numLines.add(1);
第四步:结果存储在JobExecutionResult里:
JobExecutionResult JobExecutionResult = env.execute(“Flink Batch java API Skeleton”)
myJobExecutionResult.getAccumlatorResult("num-lines")
flink支持的数据类型讲解(可序列化) 和 内置累加器的运用的更多相关文章
- Visual Studio 2015 预览版 - 支持跨平台开发Android/iOS应用程序(内置安卓模拟器)
微软最近的惊人举动真多,对普通消费者Office 移动版宣布免费,对开发者也发布了完全免费的 VS2013 社区版! 不仅如此,就连 .Net 开发框架环境也竟然「开源」并且跨平台支持 Mac 及 L ...
- js之数据类型(对象类型——单体内置对象——JSON)
JSON(Java Script Object Notation)使用JavaScript语法,是用于存储和传输数据的格式,通常用于服务端向网页传递数据.JSON格式仅仅是一个文本,文本可以被任何编程 ...
- day05_08 列表讲解、切片、内置方法
1.0 查询: a = ['wuchao','jinxing','xiaohu','sanpang','ligang'] print(a[3]) #>>>sanpang prin ...
- js之数据类型(对象类型——单体内置对象——Math)
Math是一个内置对象,它具有数学常数和函数的属性和方法.Math对象用于执行数学任务,和其它对象不同,Math只是一个静态对象并没有Math()构造函数,实际上,Math()只是一个由js设置的对象 ...
- Flink学习笔记-支持的数据类型
说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...
- Python--day72--Django内置的serializers序列化介绍
序列化 Django内置的serializers def books_json(request): book_list = models.Book.objects.all()[0:10] from d ...
- Python json.dumps 特殊数据类型的自定义序列化操作
场景描述: Python标准库中的json模块,集成了将数据序列化处理的功能:在使用json.dumps()方法序列化数据时候,如果目标数据中存在datetime数据类型,执行操作时, 会抛出异常:T ...
- MySQL知识树-支持的数据类型
本篇学习笔记的主要内容: 介绍MySQL支持的各种数据类型(常用),并讲解其主要特点. MySQL支持多种数据类型,主要包括数值类型.日期和时间类型.字符串类型. 数值类型 MySQL的数值类型包 ...
- Mysql支持的数据类型(总结)
一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUB ...
随机推荐
- 使用CSS将图片转换成黑白(灰色、置灰) & 毛玻璃效果
法1⃣️: IE浏览器: filter: gray; 其他浏览器: .gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(10 ...
- 2019-8-31-dotnet-通过-HttpClient-下载文件同时报告进度的方法
title author date CreateTime categories dotnet 通过 HttpClient 下载文件同时报告进度的方法 lindexi 2019-08-31 16:55: ...
- 【学术篇】SDOI2009 SuperGCD
特别说明: 为了避免以后搬家时的麻烦, 这里的文章继续沿用csdn的风格和分类好了~ Emmmm这个题是一道高精度的模板题啊~ 既然是高精度的裸题, 那我们这些懒人当然是选择:用python啦~ 懒癌 ...
- [转]PHP base64_encode 在URL地址参数编码上使用
因为我使用公钥,使用php的 openssl 加密之后的资料 base64_encode()字符串,然后放入请求 url 中当作参数,urlencode(base64_encode()),然后用 ur ...
- [转]sourceforge文件下载过慢
sourceforge文件下载过慢,可以用下面网址镜像下载, 通过 下载Sourceforge等国内无法下载站点文件的另一种方法博文,好像主站点是 https://www.mirrorservice. ...
- jq-demo-日历
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 三种Spring加载机制
方法一. 在main方法中启动Spring ApplicationContext ac = new XmlApplicationContext("applicationContext.xml ...
- PHP ftp_site() 函数
定义和用法 The ftp_site() 函数向 FTP 服务器发送 SITE 命令. SITE 命令没有标准化,在不同的服务器上不尽相同.对于处理文件权限或组关系方面的事情,SITE 命令很有用. ...
- JavaScript中深拷贝实现
JavaScript 中深拷贝实现 拷贝时候涉及到: 1.循环结构 2.判断数组 Array 还是对象 Object 函数实现 /** * 获取满足条件的数组中的第一个元素 * @param ...
- 单调栈(最大子矩形强化版)——牛客多校第八场A
求01矩阵里有多少个不同的1矩阵 首先预处理出pre[i][j]表示i上面连续的1个数,对每行的高度进行单调栈处理 栈里的元素维护两个值:pre[i][j]和向前延伸最多能维护的位置pos 然后算贡献 ...