2017-03-17 54 views
1

我試圖在spark中使用kryo序列化器。我已設置spark.kryo.registrationRequired=true以確保我正在註冊所有必需的課程。除了要求我註冊我的自定義類之外,它還要求我註冊Spark類以及StructType

雖然我註冊了火花StringType,但它現在崩潰了,說我還需要註冊StringType$

com.esotericsoftware.kryo.KryoException (java.lang.IllegalArgumentException: Class is not registered: org.apache.spark.sql.types.StringType$ 
Note: To register this class use: kryo.register(org.apache.spark.sql.types.StringType$.class); 
Serialization trace: 
dataType (org.apache.spark.sql.types.StructField) 
fields (org.apache.spark.sql.types.StructType)) 

我正在導入spark implicits以讀取json。我不確定這是否會導致問題。

import spark.implicits._ 
val foo = spark.read.json(inPath).as[MyCaseClass] 

我也知道需要假設置註冊將停止這一錯誤,但我沒有看到在這種情況下任何性能增益,我試圖確保我註冊一切必要的類。

+0

見http://stackoverflow.com/questions/42433383/how-can-i-cache-dataframe-with-kryo-serializer-in-評論spark:如果您只使用DataFrame的數據集(而不是RDD的),則根本沒有理由使用Kryo:Kryo用於序列化RDD數據;當使用DataFrames/Datasets時,Spark的編碼器(或預先設定的數據類型)用於序列化。 –

+0

我也在使用RDD。我喜歡獨佔使用數據集,但必須一次性下載到RDD。 – Luke

回答