Spark Kryo:注册自定义序列化程序

时间:2016-03-22 01:20:30

标签: scala apache-spark kryo

我有一个实现自定义Kryo序列化程序的类,它实现了read()中的write()com.esotericsoftware.kryo.Serializer方法(参见下面的示例)。 如何使用Spark注册此自定义序列化程序?

以下是我所拥有的伪代码示例:

class A() 

CustomASerializer extends com.esotericsoftware.kryo.Serializer[A]{
    override def write(kryo: Kryo, output: Output, a: A): Unit = ???
    override def read(kryo: Kryo, input: Input, t: Class[A]): A = ???
}

val kryo: Kryo = ... 
kryo.register(classOf[A], new CustomASerializer()); // I can register my serializer

现在在Spark:

val sparkConf = new SparkConf()
sparkConf.registerKryoClasses(Array(classOf[A]))

不幸的是,Spark并没有给我选择注册我的自定义序列化程序。知道是否有办法做到这一点?

1 个答案:

答案 0 :(得分:14)

使用此自定义序列化程序创建您自己的 KryoRegistrator

package com.acme

class MyRegistrator extends KryoRegistrator {
  override def registerClasses(kryo: Kryo) {
    kryo.register(classOf[A], new CustomASerializer())
  } 
}

然后,将spark.kryo.registrator设置为您的registrator的完全限定名称,例如com.acme.MyRegistrator

val conf = new SparkConf()
conf.set("spark.kryo.registrator", "com.acme.KryoRegistrator")