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

Spark读取多CSV文件无限运行?单文件读取正常求排查方案

Spark读取多CSV文件无限运行的排查思路
  • 检查文件夹内的文件列表
    确认文件夹中只有目标CSV文件,避免存在隐藏文件(如._开头、.crc)、编辑器备份文件或Spark临时文件,这类非目标文件可能导致解析异常卡住。

  • 验证CSV文件格式合法性
    即便表头一致,也可能存在格式问题:比如某行有未闭合的引号、字段内嵌套了分隔符;却未用引号包裹、文件编码不一致。可通过文本编辑器抽查文件内容,或用CSV校验工具验证文件完整性。

  • 查看Spark运行状态与日志

    • 访问Spark UI(默认http://<driver-ip>:4040),查看Stage和Task的运行状态:是否有Task长期卡在Running?定位到对应的文件,缩小问题范围。
    • 检查Driver和Executor的日志,查找解析错误、内存不足等警告或报错信息。
  • 调整读取参数与指定Schema

    • 尝试添加mode="DROPMALFORMED"参数,跳过格式错误的行,验证是否因坏数据导致卡住。
    • 手动指定Schema,避免Spark自动推断类型时的开销或冲突:先从单个文件获取Schema,再传入多文件读取代码:
      from pyspark.sql.types import StructType
      # 获取单个文件的Schema
      df_single = spark.read.csv("data/file1.csv", sep=';', header=True)
      custom_schema = df_single.schema
      # 使用指定Schema读取多文件
      df = spark.read.csv("data/*.csv", sep=';', header=True, schema=custom_schema)
      df.printSchema()
      
  • 检查Spark资源配置
    多文件读取会启动更多Task,若Executor内存不足、CPU资源受限或磁盘IO性能差,可能导致Task阻塞。可适当调高spark.executor.memory、spark.cores.max等配置参数,观察是否解决问题。

  • 尝试手动合并单个文件
    分别读取两个文件再执行Union操作,验证是否正常运行:

    df1 = spark.read.csv("data/file1.csv", sep=';', header=True)
    df2 = spark.read.csv("data/file2.csv", sep=';', header=True)
    df = df1.union(df2)
    df.printSchema()
    

    如果此方式正常,问题可能出在通配符读取的元数据处理环节;若仍卡住,需排查两个文件的数据类型隐性冲突(如同一字段在两个文件中实际类型不一致)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:45:36