2014-10-06 54 views
3

星火文档指出,所有你需要做的就是注册类,并添加两个变量对conf:KRYO在Apache的星火

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。

谢谢

回答

3

我能弄清楚如何解决这个问题。我将Apache Spark的版本升级到1.1.0,并开始工作。我根本没有更改任何代码,唯一改变的是我的POM。为了证明它的工作,我在我的代码和reran中评论了所有对Kryo的引用。它发生序列化错误失败。