Spark 文档指出,您所要做的就是注册您的类并在 conf 中添加两个变量:
import com.esotericsoftware.kryo.Kryo
import org.apache.spark.serializer.KryoRegistrator
class MyRegistrator extends KryoRegistrator {
override def registerClasses(kryo: Kryo) {
kryo.register(classOf[MyClass1])
kryo.register(classOf[MyClass2])
}
}
val conf = new SparkConf().setMaster(...).setAppName(...)
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
conf.set("spark.kryo.registrator", "mypackage.MyRegistrator")
val sc = new SparkContext(conf)
我已经在我的代码中实现了这一点,但是在尝试对(文本,文本)的键/值序列文件进行排序时,我仍然会遇到序列化错误。我的 MyRegistrator 版本如下所示:
class MyRegistrator extends KryoRegistrator {
override def registerClasses(kryo: Kryo) {
kryo.register(classOf[Text])
}
}
我还在 MyRegistrator 中添加了日志记录,但没有看到任何日志语句。我还故意拼错了 MyRegistrator 的名称,并且作业不会出错。除了文档允许的内容之外,还必须有更多内容。还有什么我需要做的吗?
我正在使用 Apache Spark 1.0.2。
谢谢