You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将PySpark DataFrame保存至S3存储桶的本地Docker环境问题

解决Docker中PySpark写入S3时的NoSuchMethodError错误

问题原因

你遇到的java.lang.NoSuchMethodError: 'void com.amazonaws.util.IOUtils.release(...)'错误,本质是AWS SDK JAR包版本冲突。你的容器中同时存在aws-java-sdk-bundle-1.11.901.jar和aws-java-sdk-core-1.11.797.jar:

  • aws-java-sdk-bundle是包含所有AWS SDK模块的整合包,已经自带了core模块的完整类
  • 单独的低版本core包会干扰类加载顺序,导致高版本bundle中的IOUtils方法无法被正确加载,引发方法找不到的异常

AWS环境之所以正常,是因为托管Spark服务(如EMR)会自动清理冗余依赖,避免版本冲突,而本地Docker镜像预装了冗余组件才触发问题。

解决步骤

1. 删除冲突的JAR包

在Docker容器中执行命令,移除重复的AWS SDK组件:

rm /opt/spark/jars/aws-java-sdk-core-1.11.797.jar /opt/spark/jars/aws-java-sdk-glue-1.11.797.jar

只保留aws-java-sdk-bundle-1.11.901.jar和hadoop-aws-3.3.1.jar即可,这两个版本和Hadoop 3.3.1完全兼容。

2. 补充Spark S3A配置

在SparkSession初始化时,添加明确的S3A认证和优化配置,确保环境变量被正确读取:

import os
from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .config("spark.hadoop.fs.s3.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") \
    .config("spark.hadoop.fs.s3a.access.key", os.environ.get("AWS_ACCESS_KEY_ID")) \
    .config("spark.hadoop.fs.s3a.secret.key", os.environ.get("AWS_SECRET_ACCESS_KEY")) \
    .config("spark.hadoop.fs.s3a.connection.maximum", "100") \
    .config("spark.hadoop.fs.s3a.fast.upload", "true") \
    .config("spark.dynamicAllocation.enabled", "true") \
    .config("spark.dynamicAllocation.maxExecutors", "4") \
    .config("spark.dynamicAllocation.minExecutors", "1") \
    .config("spark.dynamicAllocation.initialExecutors", "1") \
    .config("spark.sql.parquet.datetimeRebaseModeInRead", "CORRECTED") \
    .config("spark.sql.legacy.pathOptionBehavior.enabled", "true") \
    .config("spark.sql.parquet.datetimeRebaseModeInWrite", "CORRECTED") \
    .getOrCreate()

source_file = "/workspaces/sample/test/*"
df = spark.read.parquet(source_file)
df.write.format("parquet").mode("append").save("s3a://MY_BUCKET/MY_FOLDER/")

3. 验证依赖(可选)

如果问题仍存在,可以检查容器中是否有其他冗余的AWS SDK JAR包,执行命令列出所有相关包:

ls /opt/spark/jars | grep aws-

确保只有aws-java-sdk-bundle-1.11.901.jar和hadoop-aws-3.3.1.jar保留。

内容的提问来源于stack exchange,提问作者user3286259

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:55:56