Flink 支持的数据类型
Flink 流应用程序处理的是以数据对象表示的事件流。所以在Flink内部,我们需要能够处理这些的对象,他们需要被序列化和反序列化,以便通过网络传送他们,或者从状态后端,检查点和保存点读取他们。为了有效地做到这一点,Flink需要明确知道应用程序所处理的数据类型.Flink使用类型信息的概念来表示数据类型,并为每个数据类型生成特定的序列化器,反序列化器和比较器。
Flink还具有一个类型提取系统,该系统分析函数的输入和返回类型,以自动获取类型信息。从而获得序列化器和反序列化器。但是,在某些情况下,例如lambda函数或范型类型,需要显式地提供类型信息,才能使应用程序正常工作或者提高其性能。
flink支持Java和Scala中所有常见数据类型,使用最广泛的有:
- 基础数据类型:支持Java和Scala基础数据类型
- Java和Scala元组:Tuple0~Tuple25.可以传入的类型数量
- Scala样例类:case calss Person(name:String,age:Int)
- Java简单对象:实现get/set方法,必须提供无参构造函数
- 其他:(Arrays,List,Maps,Enums等。)Flink对Java和Scala中的一些特殊目的类型也都是支持的,比如Java的ArrayList,HashMap,Enum等。
Fllink UDF函数 — 更细粒度的控制流
-
函数类
Flink暴露了所有udf函数的接口(实现方式为接口或者抽象类)。例如MapFunction,FilterFunction,ProcessFunction等。
案例
-
实现FilterFunction接口
DataStream<String> flinkTweets = tweets.filter(new FlinkFilter()); public static class FlinkFilter implements FilterFunction<String>{ @Override public boolean filter(String value) throws Exception{
-