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]
我也知道需要假设置注册将停止这一错误,但我没有看到在这种情况下任何性能增益,我试图确保我注册一切必要的类。
见http://stackoverflow.com/questions/42433383/how-can-i-cache-dataframe-with-kryo-serializer-in-评论spark:如果您只使用DataFrame的数据集(而不是RDD的),则根本没有理由使用Kryo:Kryo用于序列化RDD数据;当使用DataFrames/Datasets时,Spark的编码器(或预先设定的数据类型)用于序列化。 –
我也在使用RDD。我喜欢独占使用数据集,但必须一次性下载到RDD。 – Luke