scala - Spark 克里奥 : Register a custom serializer

标签 scala apache-spark kryo

我有一个通过实现 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/

相关文章:

scala - 在 Scala 中将运算符定义为方法别名的最短表示法是什么?

apache-spark - Spark 流: avoid small files in HDFS

java - 将 RDD 转换为键值对 RDD,值位于 List 中

java - Spark - 使用不可序列化的成员序列化对象

java - 如何使用 Kryo 序列化对象并再次反序列化?

java - 使用带有自定义类的嵌套 HashMap 进行 Kryo 序列化

scala - Scaldi 和 Guice 和有什么不一样

scala - Scala中什么时候需要新的

scala - PlayFramework:项目中的多个路由文件

scala - 如何将 RDD[GenericRecord] 转换为 Scala 中的数据帧?