Kryo序列化拒绝注册类。

9

我正在尝试在IT技术中使用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

1个回答

14

我弄清楚问题所在了。我把java数组语法[]误认为是scala泛型语法[]。由于我没有注册MyClass的数组,所以会抛出异常。

所以在Java中:

kryo.register( MyClass[].class );

而Scala

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

我遇到了完全相同的问题。这个方法有效。谢谢! - Andrew Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接