首页 > 解决方案 > 为什么 ModelDescriptor 和 ModelDescriptorBuilder 不可序列化?

问题描述

在迁移到 H2O SparklingWater 3.32 时,我在 hex.genmodel.MojoModel 对象的序列化过程中遇到错误。具体来说,MojoModel 序列化通常会因与 _modelDescriptor 相关的 NotSerializableException 而失败:

引起:java.io.NotSerializableException: hex.genmodel.descriptor.ModelDescriptorBuilder$1

我了解 MojoModels 通常作为 MOJO 文件保存和重新加载。我们确实使用这些文件进行长期存储。但是,对于短期缓存,我们的代码依赖于序列化。

MojoModel 实现了可序列化。 http://docs.h2o.ai/h2o/latest-stable/h2o-genmodel/javadoc/serialized-form.html#hex.genmodel.MojoModel

但是,ModelDescriptor 和 ModelDescriptorBuilder 不实现 Serializable。事实上,它最初似乎是这样打算的,但未使用的导入在 2019 年 6 月 17 日的更新中被删除:

https://github.com/h2oai/h2o-3/commit/ebb73d6afd9191b297a577c07e0cb87f7dd6511c#diff-77271454c77ac3d5710ee2ca9938dc0caad5f5395a02004e0d89ad8906b00eb6

似乎 MojoModel 中的所有序列化变量都应该实现 Serializable。

我确实理解我们的模型定义的某些部分可能会破坏序列化过程,我们正在继续调查。如果可能,我们将尝试提取一个最小示例。然而,我想在我们继续调查这个问题时提出这个问题。

标签: h2osparkling-water

解决方案


推荐阅读