2017-03-17 50 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

回答