Spark读取多CSV文件无限运行?单文件读取正常求排查方案
Spark读取多CSV文件无限运行的排查思路
检查文件夹内的文件列表
确认文件夹中只有目标CSV文件,避免存在隐藏文件(如._开头、.crc)、编辑器备份文件或Spark临时文件,这类非目标文件可能导致解析异常卡住。验证CSV文件格式合法性
即便表头一致,也可能存在格式问题:比如某行有未闭合的引号、字段内嵌套了分隔符;却未用引号包裹、文件编码不一致。可通过文本编辑器抽查文件内容,或用CSV校验工具验证文件完整性。查看Spark运行状态与日志
- 访问Spark UI(默认
http://<driver-ip>:4040),查看Stage和Task的运行状态:是否有Task长期卡在Running?定位到对应的文件,缩小问题范围。 - 检查Driver和Executor的日志,查找解析错误、内存不足等警告或报错信息。
- 访问Spark UI(默认
调整读取参数与指定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
相关产品推荐
相关产品推荐

