问题描述
在使用Flink完成分流操作时,使用到的自定义的ProcessFunction(),需要传入一个列表参数或者一个数组参数,这个参数包含了多个点的坐标,但在运行时发现报错:
定位到错误位置为:Caused by: java.io.NotSerializableException: ustb.position_accumulation.beans.Point
意思就是我的基类无法序列化。
之前写了一个类似的函数,但接收的是Tuple2类型,参数比较简单,因为Tuple2本身就支持序列化,因此就没有发现这个错误。
而在这个问题中,首先使用的是ArrayList,经过查阅,List本身是不支持序列化的,但ArrayList支持序列化,因此排除是ArrayList的问题。
又将ArrayList类型换成POJO数组,如图所示:
chatGPT告诉我POJO本身是支持序列化,并且告诉我序列化的条件:
我的POJO都满足以上条件,这样的POJO支持序列化,但仅限于作为输入输出参数时,例如:
如果POJO直接作为输入输出参数,则可以自动被Flink序列化,但我的函数仅仅是接收POJO,并不将其作为输入输出参数:
package ustb.position_accumulation.process;
import org.apache.flink.streaming.api.functions.ProcessFunction;
import org.apache.flink.util.Collector;
import org.apache.flink.util.OutputTag;
import