2016-06-16 4 views
1

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

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

Я получаю мои данные из упругих и типа выполнения свойств является LinkedHashMap. Например, документ выглядит следующим образом: person {age: 20, name: "yarden"}, сопоставитьHashMap [String, Any] и если есть другой объект лично и т. Д.

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

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

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

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

ответ

1

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

Например:

kryo.register(classOf[mutable.LinkedHashMap[Any, Any]], 
    new TraversableSerializer[(Any, Any), mutable.LinkedHashMap[Any, Any]](true)) 

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

  • Нет связанных вопросов^_^