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

Windows11环境下PySpark读取目录CSV文件极慢的原因及解决方法

Windows 11本地PySpark读取目录CSV文件性能异常的原因与解决办法

问题背景

在Windows 11本地环境使用PySpark读取目录下2个仅20行的CSV文件时,出现严重性能问题:耗时超10分钟仍无法完成,且VS Code中无法终止内核,只能结束整个进程。但读取单个文件正常,在PySpark Docker容器中运行相同代码无异常,推测为Windows环境相关问题。

初始化Spark代码:

import findspark
findspark.init()
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

读取目录的代码:

path = r'C:\temp2\temp3\*.csv'
df2 = spark.read.option("header", True).csv(path)

df2.show()

原因分析

  1. Winutils组件缺失/配置错误:Spark依赖Hadoop的Winutils工具处理Windows文件系统操作,缺失或版本不匹配会导致文件枚举、访问操作异常缓慢。
  2. 安全软件实时扫描干扰:Windows Defender或第三方杀毒软件的实时监控会拦截Spark的文件读取操作,小文件的频繁访问会被反复扫描,大幅拖慢进程。
  3. 本地模式并行度配置不合理:Spark默认的本地模式线程数可能与Windows环境不匹配,小文件场景下调度开销远大于实际计算开销,导致进程卡顿。

解决办法

1. 配置Winutils工具

  • 下载与Spark依赖的Hadoop版本匹配的Winutils(可通过spark-submit --version查看Hadoop版本)。
  • 创建系统环境变量HADOOP_HOME,指向Winutils所在的根目录。
  • 将Winutils的bin目录添加到系统PATH环境变量中。
  • 验证:打开命令提示符,执行winutils.exe ls C:\temp2\temp3,确认能正常列出目录内文件。

2. 排除安全软件扫描范围

  • 打开Windows Defender的「病毒和威胁防护」设置,将CSV文件目录(C:\temp2\temp3)、Spark安装目录、Python环境目录添加到「排除项」列表。
  • 可临时关闭实时扫描进行测试,确认问题是否由安全软件导致(测试完成后恢复防护)。

3. 调整Spark本地模式配置

  • 初始化SparkSession时显式设置本地核心数,避免过度调度:
spark = SparkSession.builder \
    .master("local[2]")  # 根据CPU核心数设置,建议不超过实际物理核心数
    .getOrCreate()
  • 调整文件分区大小,减少小文件的分区数量,降低调度开销:
df2 = spark.read.option("header", True) \
    .option("maxPartitionBytes", "10485760")  # 设置每个分区为10MB
    .csv(r'C:\temp2\temp3')

4. 规范目录路径使用

直接传入目录路径而非通配符,避免路径解析异常:

path = r'C:\temp2\temp3'  # 不要加末尾反斜杠或通配符
df2 = spark.read.option("header", True).csv(path)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:53:26