PySpark将DataFrame输出为CSV文件时出现NativeIO报错如何解决
Windows PySpark写CSV报NativeIO错误解决方案
错误根因
该报错是Windows环境下PySpark依赖的Hadoop原生组件缺失/不匹配导致的,系统无法调用Hadoop内置的Windows文件权限校验接口。
解决方案
方案1:永久修复(推荐本地开发环境使用)
- 第一步:确认你当前PySpark版本对应的Hadoop依赖版本,可通过PySpark启动日志查看,比如Spark 3.3.x默认对应Hadoop 3.3.x版本。
- 第二步:获取对应版本的Windows适配Hadoop工具包(包含winutils.exe、hadoop.dll),将解压后的文件夹放到本地任意路径,比如
C:\dev\hadoop-3.3.0。 - 第三步:配置系统环境变量:
- 新建系统变量
HADOOP_HOME,值为上述文件夹的根路径,比如C:\dev\hadoop-3.3.0 - 编辑系统变量
Path,新增条目%HADOOP_HOME%\bin
- 新建系统变量
- 第四步:将
%HADOOP_HOME%\bin目录下的hadoop.dll文件复制到C:\Windows\System32目录中。 - 第五步:重启IDE/命令行终端,重新运行PySpark代码即可生效。
方案2:临时规避(适合单次测试快速验证)
在初始化SparkSession的时候添加禁用NativeIO校验的配置,无需修改系统环境:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("test_write_csv") \ .config("spark.hadoop.io.nativeio.enabled", "false") \ .getOrCreate()
额外代码优化建议
你提供的代码存在路径斜杠混写问题,Windows路径下要么统一用正斜杠,要么用双反斜杠避免转义错误,修改后的写文件代码参考:
Test_df.repartition(1).write.format('com.databricks.spark.csv').save("C:/philips/RS/output/OUTPUT.csv",header='true') # 或者用双反斜杠版本 # Test_df.repartition(1).write.format('com.databricks.spark.csv').save("C:\\philips\\RS\\output\\OUTPUT.csv",header='true')
内容的提问来源于stack exchange,提问作者Smita Banerjee
相关产品推荐
相关产品推荐

