Windows11下Spark写入Parquet遇Py4JJavaError问题求助
Windows 11下Spark写入Parquet时
java.lang.UnsatisfiedLinkError的解决建议 检查Java与Spark版本兼容性
- 优先选用OpenJDK 8或11,确保和你的Spark版本匹配(如Spark 3.x适配Java 8/11,Spark 2.x仅适配Java 8)。
- 验证环境变量:打开命令行执行
java -version和javac -version,确认版本一致,且JAVA_HOME指向无空格的Java安装路径(例如C:\Java\jdk1.8.0_381,避免使用带空格的Program Files目录)。
调整Spark临时目录与输出路径权限
- 手动指定Spark临时目录,避免系统临时目录的权限限制:
import os os.environ['SPARK_LOCAL_DIRS'] = r'C:\SparkTemp' # 提前创建该文件夹并确保读写权限 - 确保
p_home_sales输出路径所在目录具备读写权限,不要将输出目录放在系统保护目录(如C:\Program Files)下。
- 手动指定Spark临时目录,避免系统临时目录的权限限制:
统一PySpark的Python环境配置
- 同时设置驱动端和执行端的Python路径,避免环境不一致:
import os os.environ['PYSPARK_DRIVER_PYTHON'] = r'C:\Users\Adam\anaconda3\python.exe' os.environ['PYSPARK_PYTHON'] = r'C:\Users\Adam\anaconda3\python.exe' - 确认Anaconda环境中
pyspark和py4j包的版本与Spark版本一致,可通过pip list查看并调整。
- 同时设置驱动端和执行端的Python路径,避免环境不一致:
修复Windows本地库依赖
- 下载与Spark版本匹配的
winutils.exe,放入Spark安装目录的bin文件夹中。 - 设置
HADOOP_HOME环境变量指向你的Spark安装目录:os.environ['HADOOP_HOME'] = r'C:\spark-3.3.0-bin-hadoop3' # 替换为你的Spark实际路径
- 下载与Spark版本匹配的
用极简代码排查问题
- 先运行测试代码验证写入功能是否正常,排除业务数据的干扰:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("TestParquetWrite").getOrCreate() test_df = spark.createDataFrame([(1, 2020), (2, 2021)], ["id", "date_built"]) test_df.write.partitionBy('date_built').parquet('test_parquet', mode='overwrite') - 若测试代码成功,再回到原业务数据排查字段类型、数据格式等问题。
- 先运行测试代码验证写入功能是否正常,排除业务数据的干扰:
内容的提问来源于stack exchange,提问作者aglantzrbc
相关产品推荐
相关产品推荐

