00:00
那接下来我们来给大家大大致的总结一下,说明一下flink里边到底支持哪些数据类型,其实前面我们在做转换操作的时候,大家也已经看到了啊呃,一般情况我们在处理的过程当中,当然你可以定义基本类型了啊,就是你比方说这个整个流利源的数据就是T对吧,就是整一个整形数数据,整形数字的一个流啊,自然数对吧?自然数流这个完全是可以的,那或者是呢,我们一般处理的场景代码里边会把它包成一个,比方说呃,这里边大家看到包成一个这个样例类对吧?啊这样的话,在处理的过程当中,里边的每一个字段其实我们都是明确的嘛,你后面就可以直接根据这个字段名称直接把它拿出来去做处理了,程序代码的可读性会好很多,而且这个样例类呢,也是比较适合我们的,一般从日志里边提取来的数据,大家知道有多个字段啊,你这个包装的时候肯定如果用元组的话,可读性就没有它好,对吧?啊,所以一般情况。
01:00
我们这个包装样例类是比较多,当然还可以有其他的数据类型啊,那这里边给大家还是再把这个概念再强化一下啊,在我们正式的给大家介绍一下,那flink到底支持什么样的数据类型呢?啊,其实在flink底层啊,啊,大家知道就是所有的这个数据对象,我我们其实在这个流处理的过程当中,它流动的数据到底是什么呢?哎,其实就是一个一个的对象嘛,我们就是把这个数据对象一个一个去处理连接起来,这就叫做一个数据流,一个data stream啊,这是底层的这个数据结构,数据类型,那我们再去做处理的时候呢,还涉及到分布式,涉及到网络传输,所以大家想到了它,呃,另外就还涉及到后面我们要讲的还有这个保存,对吧,Checkpoint,时不时的为了防止这个发生故障,故障的时候要恢复,那我还得去存盘,那所有的这些操作其实都涉及到,就必须要。
02:00
做序列化和反序列化,那那所以你对于这个弗link而言,我们其实是需要有一整套完善的机制来处理所有支持的这个数据类型的,对吧?你要不然的话,这个flink怎么知道它序列化反序列化之后读出来到底是什么东西呢?哎,所以flink呢,呃,就是整体底层它有一整套的这个类型类型的结构,然后它底层会帮我们做很多的处理和影视转换,以及为每一个类型定义特定的序列化器,反序列化器,比较器啊,所以这个都是弗link已经帮我们实现了的啊,那flink里面到底支持哪些系统呢?呃,简单一句话就是Java和stla里边所有的常见数据类型全部支持,反正就是就是都支持,对吧,就大家只要认为它这个什么都能用就可以了,那首先具体来分呢,就是首先就是基础数据类。
03:00
对吧,Java和SC里边的所有的基本的数据类型啊,你像int double啊,Long对吧?啊,Char booing的这所有的这些东西都支持,你可以把它当成我们当前数据流data streamam的这个泛型啊,你我们既然是考察这个data streamam API到底支持什么数据类型嘛,当然就是说你这里边这个泛型能能传什么对吧?啊,其实就是skyla里边和Java里边的啊,所有的基本数据类型都行,另外除了这个基本数据类型之外呢,元组也可以啊,像这里边我们比较常用的就是这个tla元组对吧?小括号括起来这个其实是比较方便的,另外就是Java元组也是允许的,哎,有同学可能会奇怪,说是Java元组,Java里面有这个元组的定义吗?啊,当然就是Java语言本身是没有这个概念的,但是呢,在flink里边,它本身给我们又提供了这样的一个数据类型,就是Java的这个元组类型,这个我们点这个K。
04:00
KBY之后啊,给大家看一眼,这个KBY之后得到的一个数据类型是什么呢?我们当时给大家说过是一个kid stream对吧?啊就是有有了这个K,有了键定义的一个data stream,它本身我们说这是一个,这是一个这个继承了data stream的嘛,然后它里边的数据类型是什么呢?呃,这里边的这个泛型啊,定义的时候有一个T,有一个K,然后这两个泛型T大家知道这就是data stream本身的那个数据类型嘛,对吧,你本来是样离类,那就是样离类,本来是int就是int,本来是long就是long,那后边这个K又是什么呢?K就是我们这里边定义好的那个K的类型,就是我们的那个键的类型,对吧?因为你现在是指定了键的这个这这个数据流嘛,啊,但是这里边大家会看到啊,你KBY之后,这里得到这个是K的类型是什么呢?大大家本来以为你像我们这里边传一个string进来对吧,那难道不应该是比方说这里边传了一个ID。
05:00
啊,那ID本身是string,我们这里就是string,对吧?那你要传一个temperature,如果温度是double的话,这里不就应该是double吗?哎,但是这里边大家注意,因为你在传参的时候,我并不能直接推断出当前字段它是什么类型,对吧?那你这里边传一个词string,我哪知道它像一这个样例类里边定义的是什么类型的,至少我在这部分代码里面推断推断不出来,所以大家看它是把它直接包成了一个Java temple就是一个Java元组,而这个Java元组类型大家点进去的话会看到它其实是在。Scalela,呃,在这个flink里边,大家看flink API java.tabo对吧,FNK里边底层给我们包好的一种数据类型,哎,是放在这儿的,这是一个抽象类,那这个抽象类它具体的这个实现大家看到了啊,下面是从这个TEMP0从零元组,零元组它就是没没数了空的对吧,一直到这个25TEMP25对吧,这个它有这个26种具体的这个实现的Java元组类型啊,那这个大家要区分的,可能就是说你不要跟skyla里边的,我们找一下scla。
06:16
哦,我我随便点开一个对吧,你不要跟SC里边的这个temple类型啊,这个高混大家知道在LA里边本身是支持这个元组类型,下面是有一个有一个包装对吧,它本身是一个product,呃,有有这样的一个这个temp的这个定义的啊,一个final的case class这样定义的,这个skyla里边本身语言支持的是从一元组到22元组,这个大家之前肯定讲skyla的时候讲过,对吧?啊,现在这个flink给我们提供的Java元组的类型呢,不太一样,它是从零元组到25元组。啊,稍微略有不同,但是大家就是呃,指导了解一下就可以了,这是关于当前我们支持的这个元组类型,那除了这个之外呢,那还有就是样衣类了啊,SKY拉里边的样衣类,这个其实是在我们真正项目处理的过程当中可能是用的最多的啊,因为它这个表达性比较比较好啊,就是成代码的可读性强,表达能力也强,所以一般情况我们都会把数据读进来之后包成一个样例类,然后去做它具体的操作啊,当然你得定义它的一些,你如果要是想要做一些特别的解析的话,你得定义它的一些,呃,这个序序列化反序列化的方法对吧?呃,如果要是不需要做特别的话,那你读进来拆开就可以了,然后另外还有就是scla里边的样例类,或者说类的对象产生的对象,我们可以作为当前的这个,呃,Data stream里边的数据元素,那Java呢,Java当然也可以啊,就我可以直接定义po种啊,大家知道po就是Java简单对象对吧?啊,就是我定义了一个。
07:51
对,然后我可以直接把这个类的类型当成当前这个data stream data stream里边数据元素的类型啊,当然了,这一部分代码,你看到我们这里边是一个Java代码对吧?大家看这个风格写的这个风格也是Java代码这个泛型的这种风格啊,啊,你可以去调弗link提供的Java的API,去调这种方式也可以,怎么样呢?因为大家知道弗Li,呃,就是skyva和Java是可以混合编译的,诶所以我甚至可以就在另外一个文件里边定义好这个person对吧,用Java去定义这样一个Java的po,定义一个person类,然后在另外一一个代码里边,Scalela代码里边直接去引入它import这个这个类,然后我直接写scale代码的时候,当前的数据类型定义成person,这个也是完全可以的啊,大家感兴趣的话,像你可以自己试啊,这个比较简单,我们就不在这里给大家统一再讲了啊,那除了这些之外呢,其实。
08:51
一些特殊的集合类型,或者说其他的一些类型也都是支持的,就包括这个Java和scla里边的a released map对吧,包括枚举类型这些都是全部都支持啊,所以后边有时候我们可能也会一下就用到了,比方说定义了一个a list对吧,当成当前的数据元素的类型,或者说一个哈希map,这个都是完全可以的,所以整体一句话,那就是Java和skyla里边我们常见的用到的这些基本数据类型全部都支持。
09:24
啊,所以弗link整体是建立在这个Java和SKY的生态语言生态之上的嘛,对他们本身的支持是非常非常给力的啊,所以这个大家可以下来之后再多做一点尝试。
我来说两句