flink1.12.x State状态数据类型:ValueState、ListState、ReducingState、AggregatingState、MapState

摘自 官网

说明

keyed state 接口提供不同 类型状态 的访问接口,这些状态都作用于当前输入数据的 key 下,即:keyBy 之后才能使用

状态类型

ValueState

ValueState<T>

保存一个值,该值可以 更新 和 访问 (每个值都对应到当前的输入数据的 key,因此算子接收到的每个 key 都可能对应一个值)。

这个值可以通过 update(T) 进行更新,通过 T value() 进行访问

ListState

ListState<T>

保存一个列表。可以往这个列表中 追加数据,并在当前的列表上进行 访问。

  • 可以通过 add(T) 或者 addAll(List<T>) 进行添加元素
  • 通过 Iterable<T> get() 获得整个列表
  • 可以通过 update(List<T>) 覆盖当前的列表

ReducingState

ReducingState<T>

保存一个单值,表示添加到状态的所有值的 聚合。

接口与 ListState 类似,但使用 add(T) 增加元素,会使用提供的 ReduceFunction 进行聚合。

AggregatingState

AggregatingState<IN, OUT>

保存一个单值,表示添加到状态的所有值的聚合。

和 ReducingState 不同的是, 聚合类型 可能与 添加到状态的 元素的类型 不同

接口与 ListState 类似,但使用 add(IN) 添加元素,用指定的 AggregateFunction 进行聚合。

MapState

MapState<UK, UV>

维护了一个 映射列表。 可以添加键值对到状态中,也可以获得反映当前所有映射的迭代器。

  • 使用 put(UK,UV) 或者 putAll(Map<UK,UV>) 添加映射。
  • 使用 get(UK) 检索特定 key。
  • 使用 entries(),keys() 和 values() 分别检索映射、键和值的可迭代视图。
  • 还可以通过 isEmpty() 来判断是否包含键值对

原文出处:/show_1IX48AFjBJhF.html