Hi all,
请教一下,State应该是通过StateDescriptor提取的类型信息来序列化/反序列化, 那么如果声明为接口类型,如ListState<List<String>>,但实际存入的是ArrayList/LinkedList, 会对类型信息提取产生不良影响吗? 按我的理解,ArrayList和LinkedList在序列化时的bytes组成结构应该是不太一样的。 但是都可以作为List<List<String>>来声明。 请求野生的大佬支援一下! |
Hi
如果想要在list中保存String,也就是list中的每个元素格式是String,ListState的格式应该是 ListState<String>, 而不是 ListState<List<String>>,后者表示有一个list,list中的每一个元素均是一个list<String> ListState 本身并不属于java的collection,所以不存在ArrayList 与 LinkedList的区别。 祝好 唐云 ________________________________ From: shizk233 <[hidden email]> Sent: Thursday, August 20, 2020 18:00 To: [hidden email] <[hidden email]> Subject: state序列化问题 Hi all, 请教一下,State应该是通过StateDescriptor提取的类型信息来序列化/反序列化, 那么如果声明为接口类型,如ListState<List<String>>,但实际存入的是ArrayList/LinkedList, 会对类型信息提取产生不良影响吗? 按我的理解,ArrayList和LinkedList在序列化时的bytes组成结构应该是不太一样的。 但是都可以作为List<List<String>>来声明。 请求野生的大佬支援一下! |
抱歉,是我表述不清楚,ListState<List<String>>只是举个例子,并不是我的应用场景实际的状态。
从实际考虑,我想利用MapState保存一系列特殊的计数器Map,也就是MapState<Long,Map<String,Long>>,主要用来做一个伪窗口,key是窗口的开始时间。 主要想知道,在MapStateDescriptor声明类型信息时,我是否应该把内部Map声明成明确的HashMap类型,而不是Map类型? Yun Tang <[hidden email]> 于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 <[hidden email]> > Sent: Thursday, August 20, 2020 18:00 > To: [hidden email] <[hidden email]> > Subject: state序列化问题 > > Hi all, > > 请教一下,State应该是通过StateDescriptor提取的类型信息来序列化/反序列化, > 那么如果声明为接口类型,如ListState<List<String>>,但实际存入的是ArrayList/LinkedList, > 会对类型信息提取产生不良影响吗? > > 按我的理解,ArrayList和LinkedList在序列化时的bytes组成结构应该是不太一样的。 > 但是都可以作为List<List<String>>来声明。 > > 请求野生的大佬支援一下! > |
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 <[hidden email]> Sent: Friday, August 21, 2020 10:51 To: [hidden email] <[hidden email]> Subject: Re: state序列化问题 抱歉,是我表述不清楚,ListState<List<String>>只是举个例子,并不是我的应用场景实际的状态。 从实际考虑,我想利用MapState保存一系列特殊的计数器Map,也就是MapState<Long,Map<String,Long>>,主要用来做一个伪窗口,key是窗口的开始时间。 主要想知道,在MapStateDescriptor声明类型信息时,我是否应该把内部Map声明成明确的HashMap类型,而不是Map类型? Yun Tang <[hidden email]> 于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 <[hidden email]> > Sent: Thursday, August 20, 2020 18:00 > To: [hidden email] <[hidden email]> > Subject: state序列化问题 > > Hi all, > > 请教一下,State应该是通过StateDescriptor提取的类型信息来序列化/反序列化, > 那么如果声明为接口类型,如ListState<List<String>>,但实际存入的是ArrayList/LinkedList, > 会对类型信息提取产生不良影响吗? > > 按我的理解,ArrayList和LinkedList在序列化时的bytes组成结构应该是不太一样的。 > 但是都可以作为List<List<String>>来声明。 > > 请求野生的大佬支援一下! > |
了解了!谢谢!
Yun Tang <[hidden email]> 于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 <[hidden email]> > Sent: Friday, August 21, 2020 10:51 > To: [hidden email] <[hidden email]> > Subject: Re: state序列化问题 > > 抱歉,是我表述不清楚,ListState<List<String>>只是举个例子,并不是我的应用场景实际的状态。 > > 从实际考虑,我想利用MapState保存一系列特殊的计数器Map,也就是MapState<Long,Map<String,Long>>,主要用来做一个伪窗口,key是窗口的开始时间。 > > 主要想知道,在MapStateDescriptor声明类型信息时,我是否应该把内部Map声明成明确的HashMap类型,而不是Map类型? > > Yun Tang <[hidden email]> 于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 <[hidden email]> > > Sent: Thursday, August 20, 2020 18:00 > > To: [hidden email] <[hidden email]> > > Subject: state序列化问题 > > > > Hi all, > > > > 请教一下,State应该是通过StateDescriptor提取的类型信息来序列化/反序列化, > > 那么如果声明为接口类型,如ListState<List<String>>,但实际存入的是ArrayList/LinkedList, > > 会对类型信息提取产生不良影响吗? > > > > 按我的理解,ArrayList和LinkedList在序列化时的bytes组成结构应该是不太一样的。 > > 但是都可以作为List<List<String>>来声明。 > > > > 请求野生的大佬支援一下! > > > |
Free forum by Nabble | Edit this page |