当前位置: 首页 > 知识库问答 >
问题:

Kryo序列化拒绝注册类

柯学
2023-03-14

我正在尝试将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[_]])

当我设置日志时。TRACE()我得到以下输出:

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

当跟踪记录器打印出它已注册时,为什么会说它未注册。我找不到关于这件事的任何有用的文件。以前有人经历过这种情况吗?如果有帮助,我正在运行Apache Spark v0.8.1

共有1个答案

公良鸿光
2023-03-14

我弄清楚了问题所在。我将java数组语法[]误认为scala通用语法[]。由于我没有注册MyClass数组,因此引发了异常。

所以在java中

kryo.register( MyClass[].class );

还有斯卡拉

kryo.register( classOf[ Array[ MyClass[_] ] ] )
 类似资料:
  • 我不明白注册一个类用于kryo序列化是什么意思。为了给出一些背景,这里的链接说 Kryo不支持所有可序列化类型,并且要求您预先注册将在程序中使用的类以获得最佳性能。 还是那句话,我不明白注册一个班级的意义是什么?序列化代码不是静态的吗?就是应用相同的逻辑序列化所有类型的对象。在“高级”中提到将要序列化的类会有什么帮助呢? 谢谢!

  • 我有一个类,它通过实现中的和方法来实现自定义Kryo序列化程序(请参见下面的示例)。如何用Spark注册此自定义序列化程序? 现在在Spark: 不幸的是,Spark没有给我注册自定义序列化程序的选项。你知道有没有办法做到这一点?

  • 我想,问题出在深度嵌套的内部类上。我在登记上做错什么了吗?

  • 我正在尝试配置序列化程序实例,以便在storm拓扑中使用。 非常感谢

  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。

  • 我已经看到Beam Spark runner使用BeamSparkRunnerRegistrator进行kryo注册。有没有办法注册自定义用户类?