无法使用 spark kryo 序列化
Posted
技术标签:
【中文标题】无法使用 spark kryo 序列化【英文标题】:Unable to use spark kryo serialization 【发布时间】:2017-03-30 14:26:32 【问题描述】:我无法在 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")
但是,这会产生以下错误:
[Stage 0:> (0 + 1) / 4]17/03/30 10:15:34 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0) org.apache.spark.SparkException:Kryo 序列化失败:缓冲区溢出。可用:0,必需:157。为避免这种情况,请增加 spark.kryoserializer.buffer.max 值。
此外,我尝试在 spark-defaults.conf 中设置相同的属性,但出现相同的错误。给出的错误是报告“可用”大小为 0:,似乎我的设置被忽略了。
【问题讨论】:
【参考方案1】:我现在明白了。 “spark.kryoserializer.buffer.max”必须足够大以接受分区中的所有数据,而不仅仅是一条记录。对于包含 512mb 的 256 字节数组的分区,buffer.max 必须在 768mb 左右。我没有在文档的任何地方看到这一点,并且我的印象是 buffer.max 必须足够大才能接受分区中最大的序列化记录。
【讨论】:
以上是关于无法使用 spark kryo 序列化的主要内容,如果未能解决你的问题,请参考以下文章