Windows环境下PySpark读取文件夹CSV报UnsatisfiedLinkError求助
解决Windows下PySpark读取CSV文件夹报java.lang.UnsatisfiedLinkError的问题
核心原因
这个错误本质是Windows环境下Spark依赖的Hadoop本地原生库(winutils.exe等)缺失或配置不完整。读取单个CSV文件时可能绕过了部分HDFS相关逻辑,因此未触发错误;但读取文件夹时需要Hadoop的文件系统支持,缺失依赖就会抛出链接异常。
具体修复步骤
匹配Spark与Hadoop本地库版本
Spark版本必须和Hadoop本地库版本严格对应,比如Spark 3.3.x对应Hadoop 3.3.x,Spark 2.4.x对应Hadoop 2.7/2.8。下载对应版本的Windows二进制包(需包含winutils.exe),解压到本地路径,比如D:\hadoop-3.3.4。修正HADOOP_HOME配置细节
- 系统环境变量中添加
HADOOP_HOME,值为解压后的Hadoop路径(如D:\hadoop-3.3.4)。 - 在
Path变量中追加%HADOOP_HOME%\bin,确保winutils.exe能被系统全局调用。 - 关闭所有Anaconda终端和IDE,重新打开后验证:在命令行输入
winutils.exe version,能正常输出版本信息则配置生效。
- 系统环境变量中添加
规范文件夹路径格式
读取路径统一用正斜杠(/)或双反斜杠(\\),比如spark.read.csv("D:/data/csv_folder"),避免单反斜杠导致的转义错误。过滤文件夹内非CSV文件
Windows文件夹可能自动生成Thumbs.db这类隐藏文件,Spark读取时会尝试解析非CSV文件引发异常。读取时添加过滤条件:spark.read.csv("D:/data/csv_folder", pathGlobFilter="*.csv")手动指定Anaconda环境的Hadoop路径
若系统环境变量未生效,在代码开头手动配置:import os os.environ["HADOOP_HOME"] = "D:/hadoop-3.3.4" os.environ["PATH"] += os.pathsep + os.environ["HADOOP_HOME"] + "/bin" from pyspark.sql import SparkSession spark = SparkSession.builder.appName("ReadCSVFolder").getOrCreate() df = spark.read.csv("D:/data/csv_folder")
额外排查点
- 确认Anaconda环境已激活,确保使用的是conda安装的PySpark版本,而非系统全局版本。
- 查看错误堆栈的具体缺失库(如
hadoop.dll),若缺失可临时从Hadoop二进制包的bin目录复制到系统System32文件夹测试。
内容的提问来源于stack exchange,提问作者user2153235
相关产品推荐
相关产品推荐

