2014-12-06 3 views
1

Я пытаюсь сериализовать экземпляр класса Scala с помощью Kryo через библиотеку chill-scala Twitter. Это из библиотеки (внешней банки), и, как мне кажется, ее нужно зарегистрировать в Kryo.Регистрация класса с Kryo через twitter chill-scala

Как зарегистрировать класс для сериализации класса с помощью 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> 

В более общем плане, есть документация где-нибудь о том, как использовать холод-Скала? Авторы этого пакета, очевидно, выполнили значительную работу, и я видел ряд положительных ссылок на него - но никакой документации.

Спасибо за любые указатели,

Byron

ответ

0

Я считаю, что холод является всего лишь расширение Kryo, который обеспечивает сериализаторы для поддерживаемых классов SCALA лучше, чем Kryo умолчанию FieldSerializer.

Итак, если вы не знаете, как использовать охлаждение, попробуйте прочитать the docs of Kryo.

И, исключение из

Unable to find class: <name_of_external_class> 

, вероятно, потому что класс не в вашем пути к классам. Это может не относиться к Крио.

Обратите внимание, что, даже не зарегистрированный в Kryo, класс все еще может быть сериализован Kryo.

Если вам нужен хороший пример использования холода, исходный код Apache Spark - хороший выбор. Также допустим небольшой пример в this repo.