spark-excel读取12MB XLSX文件报GC overhead limit exceeded错误如何解决
问题根因与修复方案
1. 首要错误点
你当前代码里maxRowsInMemory参数名末尾多了一个空格,Spark无法正确识别该配置,导致内存行数限制完全不生效,这是最直接的问题。
2. 完整修复步骤
- 修正参数名空格,同时补充配套的流式读取配置,代码修改如下:
spark.read .format("com.crealytics.spark.excel") .schema(schema) .option("header", "true") // 修正参数名空格,可根据实际行宽调整数值,单行列越多、内容越长数值要设越小 .option("maxRowsInMemory", 1000) // 开启临时文件缓冲,内存放不下的内容会溢出到磁盘临时文件 .option("tempFileThreshold", 10 * 1024 * 1024) .option("dateFormat", "dd-MM-YYYY") .load(in)
- 检查spark-excel版本,0.13.0及以上版本才完全支持
maxRowsInMemory的磁盘溢出逻辑,低版本该参数仅限制解析时的批次行数,仍然会全量加载数据到内存。 - 如果仍存在OOM,调整Executor内存配置,给每个Executor至少分配2G运行内存:提交任务时添加参数
--executor-memory 2G,同时调低maxRowsInMemory的数值到500甚至更低。 - 确认你读取的XLSX文件没有超大单列内容(比如单单元格超过10M的长文本/二进制内容),如果存在这类情况,需要单独处理异常单元格,否则会直接占满单批次内存。
内容的提问来源于stack exchange,提问作者unknownUser
相关产品推荐
相关产品推荐

