解决“Kryo序列化失败:缓冲区溢出”Spark异常

cfh9epnr  于 2023-02-24  发布在  Apache
关注(0)|答案(4)|浏览(399)

我正在尝试运行Spark(Java)代码并收到错误

org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: 27".

其他帖子建议将缓冲区设置为最大值。当我尝试将最大缓冲区值设置为512MB时,我得到了错误

java.lang.ClassNotFoundException: org.apache.spark.serializer.KryoSerializer.buffer.max', '512'

我怎样才能解决这个问题?

iq0todco

iq0todco1#

属性名称正确,spark.kryoserializer.buffer.max,值应包括单位,因此在您的情况下为512m。
此外,根据您设置配置的位置,您可能必须写入--conf spark.kryoserializer.buffer.max=512m,例如,使用spark-submit或在Oozie工作流操作的<spark-opts>...</spark-opts>内。

kmbjn2e3

kmbjn2e32#

请尝试使用“spark.kryoserializer.buffer.max.mb“、“512“,而不是**spark.kryoserializer.buffer.max"、“512MB**”

nimxete2

nimxete23#

你可以在创建spark会话时在spark配置中设置为

SparkSession.builder
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.config("spark.kryoserializer.buffer.max", "512m")

也可以将spark提交命令作为

spark-submit \
--verbose \
--name "JOB_NAME" \
--master MASTER_IP \
--conf "spark.kryoserializer.buffer.max=512m" \
main.py
ttcibm8c

ttcibm8c4#

这是一个老问题,但第一次击中当我谷歌,所以回答这里帮助他人。
对于Spark 3.2(在Azure Synapse环境中,但不确定这是否重要),我尝试了所有这些组合,但唯一能将大Spark DataFrame转换为Pandas()的组合是spark.kryoserializer.buffer.max=512。数字后面没有字母,结尾没有“.mb”。

相关问题