PySpark写入DataFrame到CSV文件时出现Py4JJavaError报错求助
解决PySpark写入CSV时的UnsatisfiedLinkError问题
错误根源
你遇到的java.lang.UnsatisfiedLinkError是Windows环境下Hadoop缺少适配的本地原生库(.dll文件)导致的。PySpark依赖Hadoop的文件系统操作组件,而Windows系统需要对应的本地库支持文件权限检查等功能。
解决方案
方案1:补充Hadoop Windows原生库
- 下载与你的Spark依赖的Hadoop版本匹配的Windows原生库(例如winutils工具包)
- 将解压后的
hadoop.dll和winutils.exe放到一个目录(如C:\hadoop\bin) - 设置系统环境变量:
- 添加
HADOOP_HOME变量,值为C:\hadoop(根目录,不含bin) - 将
C:\hadoop\bin添加到系统PATH变量中
- 添加
- 重启你的Python/Notebook环境,重新执行写入代码
方案2:修改Spark配置绕过本地库检查
在初始化SparkSession时添加配置,禁用Hadoop本地库依赖:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("CSVWriter") \ .config("spark.hadoop.native.lib", "false") \ .getOrCreate()
或者在已创建的SparkSession中动态设置:
spark._jsc.hadoopConfiguration().set("hadoop.native.lib", "false")
方案3:确保写入路径权限与正确性
- 使用绝对路径写入,避免相对路径权限问题:
df.write.mode("overwrite").csv("C:/temp/mycsv_output") - 注意:Spark写入CSV时会生成一个文件夹(而非单个文件),文件夹内包含分区文件,若指定的路径已存在,需添加
mode("overwrite")覆盖或mode("append")追加
内容的提问来源于stack exchange,提问作者Nifty
相关产品推荐
相关产品推荐

