You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Synapse Workspace中Spark读取Parquet文件报错求助

Azure Synapse PySpark任务执行失败排查(EOFException)

在Azure Synapse Workspace通过Pipeline运行PySpark任务时出现失败,报错堆栈如下:

Stacktrace: An error occurred while calling o1394.execute.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 94.0 failed 4 times, most recent failure: Lost task 0.3 in stage 94.0 (TID 2313) (vm-1d164027 executor 3): java.io.EOFException
at org.apache.parquet.bytes.BytesUtils.readIntLittleEndian(BytesUtils.java:85)
at org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:520)
at org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:505)
at org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:499)
at org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:476)

报错原因分析

该错误是Spark读取Parquet文件时触发的EOFException(文件结束异常),核心原因是目标Parquet文件损坏或不完整,导致Parquet阅读器无法正常解析文件页脚信息。常见诱因包括:

  • 上游数据写入任务中途中断(如网络故障、资源耗尽),未完成Parquet文件的完整写入
  • 存储介质(如ADLS Gen2)中的文件本身损坏
  • 文件传输过程中出现丢包、中断,导致文件不完整

排查与修复步骤

1. 定位损坏的Parquet文件

  • 从任务日志中提取关联的数据源路径,逐个校验该路径下的Parquet文件:
    • 对比文件大小,筛选出与同批次正常文件差异较大的文件(过小的文件大概率未完整写入)
    • 用临时Spark脚本读取单个文件,验证是否触发相同报错:
      df = spark.read.parquet("/path/to/specific/file.parquet")
      df.show()
      

2. 修复或替换损坏文件

  • 确认文件损坏后,直接删除该文件,重新运行上游写入任务生成完整文件
  • 若文件来自外部系统,检查数据传输流程的可靠性,确保后续文件写入过程无中断

3. 配置Spark容错参数(临时缓解)

若无法立即修复文件,可临时添加以下配置增强Parquet读取的容错性:

# 关闭向量化读取,兼容部分损坏场景
spark.conf.set("spark.sql.parquet.enableVectorizedReader", "false")
# 调整列读取批次大小
spark.conf.set("spark.sql.parquet.columnarReaderBatchSize", "1024")

4. 检查Pipeline依赖链路

  • 确认Pipeline中上游任务是否成功完成,查看是否有写入失败的日志记录
  • 为上游写入任务添加校验步骤,确保文件生成后大小、完整性符合预期,再触发下游PySpark任务

内容的提问来源于stack exchange,提问作者Deepak Garg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:50:18