2016-12-08 2 views
0

Я хочу сериализовать объекты для Json внутри задания обработки потока flink. Внутри задания flink все объекты должны быть сериализуемыми.Как упорядочить формат даты Джексона Йоды?

Я использую Jackson для сериализации моих объектов.

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

Что именно делает объект, который вы пытаетесь сериализовать? Похоже, что у него есть «JacksonJodaDateFormat» как переменная-член, которая не является объектом, который может быть преобразован в представление JSON. Вы можете исключить это поле, используя '@ JsonIgnore'. – Jesper

+0

@ Jesper Это не вопрос сериализации JSON (у Джексона не должно возникнуть проблемы с сериализацией 'JacksonJodaDateFormat', если это необходимо, хотя это было бы бесполезно). Это сериализация Java. 'JacksonJodaDateFormat' не' Serializable'. –

+0

@SotiriosDelimanolis Ах, да, я вижу. В этом случае CPA может, конечно, сделать поле «переходным», если это работает для его применения. – Jesper

ответ

2

Флинк сериализует объекты данных с помощью пользовательских сериализаторов (неизвестные объекты сериализуются с помощью Kryo). Однако объекты функций (то есть объекты классов, реализующие интерфейсы функций, такие как MapFunction), отправляются в кластер с сериализацией Java.

Проблема здесь заключается в том, что ваш класс ObjectMapper имеет несериализуемое поле. Вы можете попытаться установить поле для transient и:

1) перезаписать методы сериализации Java или 2) реализует функцию как RichFunction и инициализировать несериализуемое поле в RichFunction.open() методе, который вызывается перед первым запись обрабатывается.

+0

Инициализация несериализуемого объекта в функции RichFunction.open() сработала! Вы также можете сделать объект статическим. – CPA

+0

Статические элементы в функциях опасны. Они используются всеми операторами на том же самом диспетчере задач. Поэтому вам нужно быть уверенным, что все методы являются потокобезопасными, иначе вы увидите исключения или странные побочные эффекты. –

Смежные вопросы