PySpark写入parquet文件失败,报错Hadoop bin目录不存在如何解决?
问题排查与解决步骤
核心问题定位
从报错信息可直接确定根因:系统查找的Hadoop bin路径为C:\Users\admin\Downloads\NewSpark\hadoop\bin\bin,比实际正确路径多拼接了一层bin目录,导致文件找不到。
读取CSV正常是因为读本地小文件不需要调用Hadoop的文件系统实现,写入操作必须依赖Hadoop相关接口,所以才会触发路径校验报错。
具体排查操作
- 检查系统环境变量配置
- 确认
HADOOP_HOME变量值是否配置为Hadoop根目录,正确值应为C:\Users\admin\Downloads\NewSpark\hadoop,如果当前值末尾带了\bin,直接删除末尾的\bin即可 - 检查系统
Path变量中是否存在%HADOOP_HOME%\bin项,确保该项配置正确,没有重复写bin目录
- 确认
- 检查Spark自定义配置
查看代码中调用的get_spark_app_config()方法返回的配置、或者spark-defaults.conf配置文件中,是否手动设置了hadoop.home.dir参数,如果该参数值末尾带了\bin,修正为Hadoop根目录路径即可 - 校验依赖文件完整性
确认C:\Users\admin\Downloads\NewSpark\hadoop\bin目录下存在对应版本的winutils.exe文件,Windows环境下Spark写入操作必须依赖该文件,缺失的话下载对应Hadoop版本的winutils放入bin目录即可
生效验证
所有配置修改完成后,重启运行代码的IDE或者命令行终端,重新执行代码即可正常写入parquet文件。
内容的提问来源于stack exchange,提问作者Anu
相关产品推荐
相关产品推荐

