Hi

其实你的问题就是MapState中的value本身是java的map结构,也就是对应MapStateDescriptor里面的valueSerializer是否需要区分显示声明成HashMap类型,这个取决于你的value
 serializer实现,如果你用的是Flink内置的MapSerializer[1],没必要声明成HashMap类型。


[1] 
https://github.com/apache/flink/blob/master/flink-core/src/main/java/org/apache/flink/api/common/typeutils/base/MapSerializer.java


祝好
唐云

________________________________
From: shizk233 <[email protected]>
Sent: Friday, August 21, 2020 10:51
To: [email protected] <[email protected]>
Subject: Re: state序列化问题

抱歉,是我表述不清楚,ListState<List<String>>只是举个例子,并不是我的应用场景实际的状态。
从实际考虑,我想利用MapState保存一系列特殊的计数器Map,也就是MapState<Long,Map<String,Long>>,主要用来做一个伪窗口,key是窗口的开始时间。

主要想知道,在MapStateDescriptor声明类型信息时,我是否应该把内部Map声明成明确的HashMap类型,而不是Map类型?

Yun Tang <[email protected]> 于2020年8月21日周五 上午12:13写道:

> Hi
>
> 如果想要在list中保存String,也就是list中的每个元素格式是String,ListState的格式应该是
> ListState<String>, 而不是
> ListState<List<String>>,后者表示有一个list,list中的每一个元素均是一个list<String>
>
> ListState 本身并不属于java的collection,所以不存在ArrayList 与 LinkedList的区别。
>
> 祝好
> 唐云
> ________________________________
> From: shizk233 <[email protected]>
> Sent: Thursday, August 20, 2020 18:00
> To: [email protected] <[email protected]>
> Subject: state序列化问题
>
> Hi all,
>
> 请教一下,State应该是通过StateDescriptor提取的类型信息来序列化/反序列化,
> 那么如果声明为接口类型,如ListState<List<String>>,但实际存入的是ArrayList/LinkedList,
> 会对类型信息提取产生不良影响吗?
>
> 按我的理解,ArrayList和LinkedList在序列化时的bytes组成结构应该是不太一样的。
> 但是都可以作为List<List<String>>来声明。
>
> 请求野生的大佬支援一下!
>

回复