【问题标题】:Kryo in Apache SparkApache Spark 中的 Kryo
【发布时间】:2014-10-06 16:55:19
【问题描述】:

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。

谢谢

【问题讨论】:

    标签: apache-spark kryo


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2019-12-25
      相关资源
      最近更新 更多