我想在flink流处理作业中将对象序列化为Json。在flink作业中,所有对象都需要可序列化。
我正在使用杰克逊来序列化我的物品。
final ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
当我使用它时,我得到以下异常:
java.io.NotSerializableException: com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat
如何使包含joda模块的对象映射器可序列化?
答案 0 :(得分:2)
Flink使用自定义序列化程序序列化数据对象(使用Kryo序列化未知对象)。但是,函数对象(即实现函数接口的类的对象,如MapFunction
)将通过Java序列化传送到集群。
此处的问题似乎是您的ObjectMapper
类具有非序列化字段。您可以尝试将字段设置为transient
,并且:
1)覆盖Java序列化方法或
2)将函数实现为RichFunction
并初始化RichFunction.open()
方法中的非序列化字段,该方法在处理第一条记录之前调用。