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

Windows下PySpark写入CSV/Parquet报Py4JJavaError排查

问题根因

报错java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z的核心原因是Windows环境下Hadoop缺少匹配版本的原生IO依赖,你虽然配置了HADOOP_HOME并将bin目录加入系统路径,但存在依赖文件缺失、版本不匹配或加载失败的问题。
注意:df.show()、df.printSchema()属于读操作,不会触发Hadoop原生IO层的Windows本地权限校验逻辑,只有写入本地文件系统时才会调用NativeIO的本地方法,因此会出现读操作正常、写操作报错的现象。

分步解决方法
  • 确认Hadoop版本匹配
    先执行代码查询当前PySpark绑定的Hadoop大版本,避免下错依赖:
    from pyspark.sql import SparkSession
    spark = SparkSession.builder.getOrCreate()
    print(spark.sparkContext._jvm.org.apache.hadoop.util.VersionInfo.getVersion())
    
    拿到版本号后,找对应大版本的winutils.exe、hadoop.dll两个核心文件,禁止跨大版本混用(比如Hadoop3.3.x不能用Hadoop2.7的依赖)。
  • 部署依赖文件
    把下载好的winutils.exe、hadoop.dll直接放到%HADOOP_HOME%\bin目录根路径下,不要嵌套子文件夹。额外复制一份hadoop.dll放到C:\Windows\System32目录,避免系统加载dll时路径检索失败。
  • 初始化临时目录权限
    手动在C盘创建C:\tmp\hive目录,之后以管理员身份打开命令提示符,执行命令完成权限配置:
    %HADOOP_HOME%\bin\winutils.exe chmod 777 /tmp/hive
    
  • 重启环境验证
    完全关闭当前运行的PySpark进程、Python IDE(环境变量和dll加载不会在运行中的进程热更新),重新启动后执行写入代码即可。
常见避坑说明
  • 如果部署完依赖还是报dll加载失败,直接安装最新版Microsoft Visual C++ Redistributable运行库,多数精简版Windows缺少该公共依赖会导致hadoop.dll无法正常加载。
  • 写入文件时如果目标路径已经存在也会触发报错,写入时可以指定overwrite模式,避免路径冲突:
    df.write.mode("overwrite").csv('test.csv', header=True)
    df.write.mode("overwrite").parquet('test.parquet')
    
  • 不要使用存放在含中文、空格路径下的HADOOP_HOME,Windows原生IO接口对特殊路径的兼容性很差,很容易触发加载失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:27:21