深圳网站建设是什么石家庄网络seo推广
Flink的使用过程中,我们的数据都是定义好的 UserBehavior 类型,那还有没有其他更灵活的类型可以用呢?Flink 支持的数据类型到底有哪些?
1. Flink 的类型系统
Flink 作为一个分布式处理框架,处理的是以数据对象作为元素的流。Flink 使用类型信息 (TypeInformation
) 来统一表示数据类型,并为每个数据类型生成特定的序列化器、反序列化器和比较器。对于复杂的数据类型,Flink 可能不支持,因此需要使用类型推断机制。此外,Flink 还支持自定义类型信息,以便更好地处理不同类型的数据。
2. Flink 支持的数据类型
常见的 Java 和 Scala 数据类型,Flink 都是支持的。Flink 在内部对不同的类型支持进行了划分,这些类型可以在 Types 工具类中找到:
- 基本类型: 所有 Java 基本类型及其包装类,再加上 Void、String、Date、BigDecimal 和 BigInteger。
- 数组类型:基本类型数组(PRIMITIVE_ARRAY)和对象数组(OBJECT_ARRAY)
- 复合数据类型:
- Java 元组类型(TUPLE):这是 Flink 内置的元组类型,是 Java API 的一部分。最多25 个字段,也就是从 Tuple0~Tuple25,不支持空字段,
- Scala 样例类及 Scala 元组:不支持空字段
- 行类型(ROW):可以认为是具有任意个字段的元组,并支持空字段
- POJO:Flink 自定义的类似于 Java bean 模式的类
- 辅助类型:Option、Either、List、Map等
- 泛型类型(GENERIC):
Flink 对 POJO 类型的要求如下:
- 类是公共的(public)和独立的(standalone,也就是说没有非静态的内部类);
- 类有一个公共的无参构造方法;
- 类中的所有字段是 public 且非 final 的;或者有一个公共的 getter 和 setter 方法,这些
方法需要符合 Java bean 的命名规范。
3. 类型提示(Type Hints)
Flink提供了显示注册类型信息的方式,通过.returns()
实现。
.map(word -> Tuple2.of(word, 1L))
.returns(Types.TUPLE(Types.STRING, Types.LONG));
如果是复杂类型信息可以这样使用:
returns(new TypeHint<Tuple2<Integer, SomeType>>(){})