Регистрация класса в Kryo через twitter chill-scala

Я пытаюсь сериализовать экземпляр класса Scala, используя Kryo через библиотеку Chill-Scala Twitter. Это из библиотеки (внешняя банка), поэтому, я думаю, ее нужно зарегистрировать в 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? Авторы этого пакета, очевидно, проделали значительный объем работы, и я видел ряд положительных ссылок на него, но никакой документации.

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

Байрон


person bwbecker    schedule 06.12.2014    source источник


Ответы (1)


Я считаю, что chill — это просто расширение Kryo, которое предоставляет сериализаторы для поддерживаемых классов scala лучше, чем Kryo по умолчанию FieldSerializer.

Итак, если вы не знаете, как использовать chill, попробуйте прочитать документацию Kryo.

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

Unable to find class: <name_of_external_class>

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

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

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

person Ambling    schedule 29.06.2015