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

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配置细节

    1. 系统环境变量中添加HADOOP_HOME,值为解压后的Hadoop路径(如D:\hadoop-3.3.4)。
    2. 在Path变量中追加%HADOOP_HOME%\bin,确保winutils.exe能被系统全局调用。
    3. 关闭所有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:36:00