使用PySpark写入文件遇问题(已装PyArrow仍提示未找到)
PySpark在Windows下写入文件失败及依赖问题解决方案
一、解决NativeIO$Windows.access0链接错误
这个错误是Hadoop在Windows环境下缺少原生依赖库或版本兼容问题导致的,按以下步骤处理:
- 下载与你的Hadoop 3.5.1版本匹配的winutils工具包,解压后将
winutils.exe和hadoop.dll复制到Hadoop安装目录的bin文件夹下 - 配置系统环境变量:
- 添加
HADOOP_HOME,值为你的Hadoop安装根目录(比如C:\hadoop-3.5.1) - 将
%HADOOP_HOME%\bin添加到系统Path变量中
- 添加
- 更换Java版本:Java 22属于较新的版本,Hadoop 3.5.1暂未完全适配,建议切换到Java 8或Java 11(长期支持版),并更新
JAVA_HOME环境变量指向新的Java目录 - 检查目标文件夹权限:确保运行Jupyter的用户对要写入的文件夹有读写权限,避免用管理员身份运行Jupyter导致权限冲突
二、解决PyArrow依赖检测失败问题
明明已安装PyArrow 11.0.0却提示未找到,核心原因是Jupyter使用的Python环境与PySpark调用的Python环境不一致:
- 在Jupyter中执行以下代码,查看当前内核使用的Python路径:
import sys print(sys.executable) - 打开命令提示符,用上述路径的Python重新安装PyArrow:
# 替换为你得到的Python路径 C:\path\to\python.exe -m pip install pyarrow==11.0.0 --force-reinstall - 配置
PYSPARK_PYTHON环境变量,使其指向上述Python路径,确保PySpark使用和Jupyter相同的解释器 - 重启Jupyter内核,重新运行代码测试
测试验证
可以用最简代码验证修复效果:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("WriteTest").getOrCreate() # 创建测试DataFrame test_df = spark.createDataFrame([(1, "2024-01-01"), (2, "2024-01-02")], ["id", "date_built"]) # 测试CSV写入 test_df.write.mode("overwrite").csv("test_csv") # 测试分区Parquet写入 test_df.write.partitionBy("date_built").mode("overwrite").parquet("test_parquet")
内容的提问来源于stack exchange,提问作者john-a-ellis
相关产品推荐
相关产品推荐

