Сериализация Kryo отказывается регистрировать класс

Я пытаюсь использовать крио-сериализацию с помощью:

kryo.setRegistrationRequired(true);

Я продолжаю получать следующую ошибку о том, что определенный класс не зарегистрирован:

java.lang.IllegalArgumentException: Class is not registered: com.my.package.MyClass[]
Note: To register this class use: kryo.register(com.my.package.MyClass[].class);

Тем не менее, я регистрирую его:

kryo.register(classOf[MyClass[_]])

Когда я устанавливаю Log.TRACE(), я получаю следующий вывод:

00:11 TRACE: [kryo] Register class ID 51: com.my.package.MyClass (com.esotericsoftware.kryo.serializers.FieldSerializer)

Почему он говорит, что он не зарегистрирован, когда регистратор трассировки печатает, что он был зарегистрирован. Я не могу найти никакой полезной документации по этому вопросу. Кто-нибудь испытал это раньше? Если это поможет, я запускаю Apache Spark v0.8.1.


person kbirk    schedule 25.02.2014    source источник


Ответы (1)


Я понял, в чем дело. Я ошибочно принимал синтаксис массива Java [] за общий синтаксис scala []. Исключение было вызвано, так как я не зарегистрировал массив MyClass.

Так в джаве

kryo.register( MyClass[].class );

И скала

kryo.register( classOf[ Array[ MyClass[_] ] ] )
person kbirk    schedule 03.03.2014
comment
Точно такая же проблема была у меня. Это сработало. Спасибо! - person Andrew Brown; 20.10.2015