Apache Spark中的Kryo

时间:2014-10-06 16:55:20

标签: apache-spark kryo

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)

我已在我的代码中实现了这一点,但在尝试对(Text,Text)的键/值序列文件进行排序时仍然会出现序列化错误。我的MyRegistrator版本如下所示:

class MyRegistrator extends KryoRegistrator {
  override def registerClasses(kryo: Kryo) {
    kryo.register(classOf[Text])
  }
}

我还在MyRegistrator中添加了日志记录,但没有看到日志语句。我也故意拼错了MyRegistrator的名字而且工作没有错误。除了文档允许的内容之外,还有更多内容。还有什么我需要做的吗?

我正在使用Apache Spark 1.0.2。

由于

1 个答案:

答案 0 :(得分:3)

我能够弄清楚如何解决这个问题。我将Apache Spark的版本升级到1.1.0并开始工作。我根本没有改变任何代码,我唯一改变的是我的POM。为了证明它有效,我在我的代码中注释了对Kryo的所有引用并重新说明了。它因序列化错误而失败。