【发布时间】:2019-08-23 16:58:18
【问题描述】:
我正在使用 spark 2.4.2 读取包含 600 条记录的 csv。最后 100 条记录包含大量数据。 我遇到了问题,
ERROR Job aborted due to stage failure:
Task 1 in stage 0.0 failed 4 times, most recent failure:
Lost task 1.3 in stage 0.0 (TID 5, 10.244.5.133, executor 3):
org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: 47094.
To avoid this, increase spark.kryoserializer.buffer.max value.
我已将spark.kryoserializer.buffer.max 增加到 2g(允许的最大设置)并将 spark 驱动程序内存增加到 1g,并且能够处理更多记录,但仍然无法处理 csv 中的所有记录。
我已尝试对 600 条记录进行分页。例如,使用 6 个分区,每个分区可以处理 100 条记录,但由于最后 100 条记录很大,因此会发生缓冲区溢出。
在这种情况下,最后 100 条记录很大,但这可能是前 100 条或 300 到 400 条之间的记录。除非我事先对数据进行采样以了解偏差,否则我无法优化处理方法。
spark.kryoserializer.buffer.max不允许超过2g有什么原因吗?
我可以增加分区并减少每个分区读取的记录吗?是否可以使用压缩?
欣赏任何想法。
【问题讨论】:
-
你能显示代码吗?
标签: apache-spark