Apache flink POJO类中ArrayList的序列化
对于流处理作业,我定义了一个POJO类,它具有一个泛型参数Apache flink POJO类中ArrayList的序列化,apache-flink,flink-streaming,Apache Flink,Flink Streaming,对于流处理作业,我定义了一个POJO类,它具有一个泛型参数T和一个类型为ArrayList的属性,我将其用作数据流中的元素类型,以及CoKeyedProcessFunction中有状态计算中的状态存储类型 class TestClass<T> { ArrayList<T> list; // ... getter and setter for list } class测试类{ 数组列表; //…列表的getter和setter } 对于ArrayList
T
和一个类型为ArrayList
的属性,我将其用作数据流
中的元素类型,以及CoKeyedProcessFunction
中有状态计算中的状态存储类型
class TestClass<T> {
ArrayList<T> list;
// ... getter and setter for list
}
class测试类{
数组列表;
//…列表的getter和setter
}
对于ArrayList
,Flink的序列化返回到Kryo,Flink会在流处理作业启动时发出警告
由于Flink似乎包含列表的专用序列化程序,特别是ArrayList,我希望Flink能够自动识别和使用这些序列化程序,就像原语值及其装箱版本一样
我必须做些什么才能迫使Flink使用正确的序列化程序?你能分享一些代码吗?一般来说,在没有Kryo的情况下序列化列表应该不会有问题。事实证明,如果我使用
list
作为属性类型,Flink不会回到Kryo。然后,序列化独立于列表的实现工作。反序列化似乎总是使用ArrayList实现。是的,这是预期的行为,我想文档中已经描述过。ListSerializer
总是使用ArrayList
作为类型。您可以共享一些代码吗?一般来说,在没有Kryo的情况下序列化列表应该不会有问题。事实证明,如果我使用list
作为属性类型,Flink不会回到Kryo。然后,序列化独立于列表的实现工作。反序列化似乎总是使用ArrayList实现。是的,这是预期的行为,我想文档中已经描述过。ListSerializer
始终使用ArrayList
作为类型。