2014-10-06 61 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的引用。它發生序列化錯誤失敗。