Java
本身自带的序列化和反序列化的功能,但是辅助信息占用空间比较大,在序列化对 象时记录了过多的类信息。Apache Flink
摒弃了
Java
原生的序列化方法,以独特的方式处理 数据类型和序列化,包含自己的类型描述符,泛型类型提取和类型序列化框架。
TypeInformation
是所有类型描述符的基类。它揭示了该类型的一些基本属性,并且可以生 成序列化器。
TypeInformation 支持以下几种类型:
- BasicTypeInfo: 任意 Java 基本类型或 String 类型。
- BasicArrayTypeInfo: 任意 Java 基本类型数组或 String 数组。
- WritableTypeInfo: 任意 Hadoop Writable 接口的实现类。
- TupleTypeInfo: 任意的 Flink Tuple 类型(支持 Tuple1 to Tuple25)。Flink tuples 是固定长度固定类型的 Java Tuple 实现。
- CaseClassTypeInfo: 任意的 Scala CaseClass(包括 Scala tuples)。
- PojoTypeInfo: 任意的 POJO (Java or Scala),例如,Java 对象的所有成员变量,要么是 public 修饰符定义,要么有 getter/setter 方法。
- GenericTypeInfo: 任意无法匹配之前几种类型的类。
针对前六种类型数据集,
Flink
皆可以自动生成对应的
TypeSerializer
,能非常高效地对 数据集进行序列化和反序列化。