Сериализация связанной хеш-карты kryo

Я использую сериализатор kryo как сериализатор в проектных работах со искрой и написан на scala. Я регистрирую все классы, которые использую в своем проекте, и есть один класс, который не сериализуется и не десирализуется, который связан с хэш-картой. Регистрация связанной хеш-карты:

kryo.register(scala.collection.mutable.linkedHashMap[_, _])

Я получаю свои данные из эластичного, а тип свойств времени выполнения связан с HashMap. Например, документ выглядит так: человек {возраст: 20, имя: "ярден"}, сопоставляется с linkedHashMap[String, Any] и если есть другой объект лично и т. д.

Когда я хочу десериализовать данные, которые хранятся как linkedHashMap (например, собирать RDD), результатом является просто пустой объект.

Я пытаюсь использовать MapSerializer (другой параметр в функции регистрации), но это не удается, потому что это для java linkedHashMap. Я пытаюсь найти подходящий сериализатор для scala linkedHashMap, но не нашел. Существует решение каждый раз, когда я получаю LinkedHashMap, конвертирую его в карту, и это работает, но это не очень хорошая практика. Я думаю о том, что, возможно, есть способ заставить тип времени выполнения быть картой, а не linkedHashMap, но я не нашел никакого решения.

Я считаю, что лучше всего найти сериализатор, который подходит для linkedHashMap scala, но я его не нашел.

Любое решение вещей, которые мне не удалось решить, будет приветствоваться.


person david lopez    schedule 16.06.2016    source источник


Ответы (1)


Попробуйте использовать TraversibleSerializer.

Например:

kryo.register(classOf[mutable.LinkedHashMap[Any, Any]],
  new TraversableSerializer[(Any, Any), mutable.LinkedHashMap[Any, Any]](true))
person Rahul Palamuttam    schedule 27.08.2016