![](/img/trans.png)
[英]Handling case classes in twitter chill (Scala interface to Kryo)?
[英]Registering a class with Kryo via twitter chill-scala
我正在尝试通过Twitter的chill-scala库使用Kryo序列化Scala类的实例。 它来自库(外部jar),因此,我认为需要在Kryo中注册。
如何使用chill-scala注册一个类以进行(反)序列化?
这是我代码的核心,主要是基于检查chill-scala测试套件。
// This is from the chill-scala test suite
def serialize[T](t: T): Array[Byte] = ScalaKryoInstantiator.defaultPool.toBytesWithClass(t)
def deserialize[T](bytes: Array[Byte]): T =
ScalaKryoInstantiator.defaultPool.fromBytes(bytes).asInstanceOf[T]
/**
* Save a value in cache.
*/
def save[T](key: String, value: T, expiration: Int = 0): Future[T] = {
cache.put(key, serialize[T](value), expiration, TimeUnit.SECONDS)
Future.successful(value)
}
/**
* Finds a value in the cache.
*/
def find[T: ClassTag](key: String): Future[Option[T]] = Future {
val result = deserialize[T](cache.get(key).asInstanceOf[Array[Byte]])
Option(result)
}
当我运行它时,它会抛出
com.esotericsoftware.kryo.KryoException: Unable to find class: <name_of_external_class>
更一般而言,是否存在有关如何使用chill-scala的文档? 该软件包的作者显然已经做了很多工作,我已经看到了很多关于它的积极参考-但没有文档。
感谢您的指导,
拜伦
我认为chill只是Kryo的扩展,它比Kryo默认的FieldSerializer
更好地为受支持的scala类提供了序列化器。
因此,如果您不知道如何使用chill,则应尝试阅读Kryo的文档 。
而且,除了
Unable to find class: <name_of_external_class>
可能是因为该课程不在您的课程路径中。 它可能与Kryo无关。
请注意,即使未在Kryo中注册,该类仍可以由Kryo序列化。
如果您需要使用chill的良好示例,那么Apache Spark的源代码是一个不错的选择。 同样, 这个仓库中的小例子是可以接受的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.