我正在尝试运行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'
如何解决这个问题?
属性名称是正确的,spark.kryoserializer.buffer.max
,该值应包括单位,因此在您的情况下为 512m。
此外,根据您设置配置的位置,您可能必须编写--conf spark.kryoserializer.buffer.max=512m
。例如,使用spark-submit
或在 Oozie worflow 操作的<spark-opts>...</spark-opts>
内。
尝试使用 " spark.kryoserializer.buffer.max.mb
"、"512
" 代替 spark.kryoserializer.buffer.max
"、"512MB
"
这是一个古老的问题,但当我用谷歌搜索时,第一个命中,所以在这里回答以帮助他人。
对于Spark 3.2(在Azure Synapse环境中,但不确定这是否重要),我尝试了所有这些组合,但唯一可以将大型Spark DataFrame转换为Pandas()的组合是spark.kryoserializer.buffer.max=512
。数字后没有字母,末尾没有".mb"。
创建 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