Flink流计算编程--如何实现基于KEY/VALUE的List State

本文介绍了Flink的ListState,作为基于KEY/VALUE的state实现方式之一,用于存储多个值的列表。文章通过例子展示了如何定义和使用ListState,并指出其在需要缓存多个值进行计算的场景中的应用。同时,文章强调了使用ListState时必须基于key并获取RuntimeContext的条件,并提供了一个在Flatmap操作中实现类似WindowFunction功能的示例。
摘要由CSDN通过智能技术生成

1、ListState简介

Flink提供了3种基于KEY/VALUE的state的实现方式,分别是:

ValueState<T>
ListState<T>
ReducingState<T>

官方文档中关于state的使用可以参考这里:Working with State

之前文章中,有一个使用ValueState的例子:ValueState,而ValueState适用于拿到上一条记录,或者上一个窗口中的记录,即ValueState存放的数据仅仅是一条记录,这在很多情况下都很有用。例如上一个窗口中的某些值要传递到下一个窗口,或者上一条记录中的某个值要传递到下一个记录等等。

而ListState则是将需要某些值存到一个List中(Iterable),即缓存的数据不仅仅是1个值,而是多个值。这在很多情况下也很有用,例如计算的数值要包含全天的每一个记录,那么此时只有将每一个记录的值存成一个列表,才可以计算。

2、ListState例子

如何获取ListState?
先定义ListState,并override RichFunction的open方法:

var state : ListState[TransactionListState] = null
override def open(config : Configuration) : Unit = {

state = getRuntimeContext.getListState[TransactionListState](new ListStateDescriptor[TransactionListState]("VWAP List State",classOf[TransactionListState]))
}

其中,ListStateDescriptor类提供了几种不同的定义方式:
这里写图片描述
这里我选择了第一种,2个参数分别是ListStateDescriptor的名字以及typeClass。

查询列表与

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值