我无法在spark-2.0.2中使用kryo序列化程序。在我的scala驱动程序代码中,我有。
sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
parkConf.set("spark.kryoserializer.buffer.max","64m")
parkConf.set("spark.kryoserializer.buffer","64k")
但是,这会产生以下错误:
[阶段0:> (0 + 1)/ 4] 17/03/30 10:15:34错误执行者:阶段0.0(TID 0)中任务0.0的异常 org.apache.spark.SparkException:Kryo序列化失败:缓冲区溢出。可用:0,必需:157。为避免这种情况,请增加spark.kryoserializer.buffer.max值。
此外,我尝试在spark-defaults.conf中设置相同的属性,但错误相同。给错误报告"可用"大小为0:,似乎我的设置被忽略了。
答案 0 :(得分:-1)
我现在明白了。 " spark.kryoserializer.buffer.max"必须足够大才能接受分区中的所有数据,而不仅仅是记录。对于包含512mb的256字节数组的分区,buffer.max必须大约为768mb。我没有在文档中的任何地方看到这个解释,并且认为buffer.max必须足够大才能接受分区中最大的序列化记录。