我有一个通过实现 read()
来实现自定义 Kryo 序列化程序的类。和 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 没有给我注册自定义序列化程序的选项。知道有没有办法做到这一点?
最佳答案
创建您自己的 KryoRegistrator
注册了这个自定义序列化程序:
package com.acme
class MyRegistrator extends KryoRegistrator {
override def registerClasses(kryo: Kryo) {
kryo.register(classOf[A], new CustomASerializer())
}
}
然后,设置
spark.kryo.registrator
到您的注册人的完全限定名称,例如com.acme.MyRegistrator
:val conf = new SparkConf()
conf.set("spark.kryo.registrator", "com.acme.KryoRegistrator")
关于scala - Spark 克里奥 : Register a custom serializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36144618/