了解了!谢谢!

Yun Tang <[email protected]> 于2020年8月21日周五 下午4:00写道:

> 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>>来声明。
> >
> > 请求野生的大佬支援一下!
> >
>

回复