Kryo 序列化拒绝注册类 [英] Kryo serialization refuses to register class
问题描述
我正在尝试使用 kryo 序列化:
I'm trying to use kryo serialization with:
kryo.setRegistrationRequired(true);
我不断收到以下错误消息,指出某个类未注册:
I keep getting the following error saying that a certain class is not registered:
java.lang.IllegalArgumentException: Class is not registered: com.my.package.MyClass[]
Note: To register this class use: kryo.register(com.my.package.MyClass[].class);
但是,我确实注册了它:
However, I do register it:
kryo.register(classOf[MyClass[_]])
当我设置 Log.TRACE() 时,我得到以下输出:
When I set Log.TRACE() I get the following output:
00:11 TRACE: [kryo] Register class ID 51: com.my.package.MyClass (com.esotericsoftware.kryo.serializers.FieldSerializer)
为什么trace logger打印它已经注册了,为什么说它没有注册.我找不到有关此事的任何有用文档.有谁之前经历过这个吗?如果它有帮助,我正在运行 Apache Spark v0.8.1
Why does it say it is not registered, when the trace logger prints that it has been registered. I cannot find any useful documentation on the matter. Has anyone experienced this before? If it helps i'm running Apache Spark v0.8.1
推荐答案
我想出了问题所在.我将 java 数组语法 [] 误认为是 Scala 通用语法 [].由于我没有注册 MyClass 数组,因此正在抛出异常.
I figured out what the issue was. I was mistaking the java array syntax [] for the scala generic syntax []. The exception was being being thrown since I did not register an array of MyClass.
所以在java中
kryo.register( MyClass[].class );
和scala
kryo.register( classOf[ Array[ MyClass[_] ] ] )
这篇关于Kryo 序列化拒绝注册类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!