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

PySpark 3.5集成S3:确定aws-java-sdk与hadoop-aws正确版本

PySpark 3.5 集成S3的JAR包版本匹配与解决方案

核心版本匹配规则

PySpark 3.5默认绑定的Hadoop版本是3.3.4,必须严格遵循以下对应关系:

  • hadoop-aws JAR版本:必须与Hadoop版本完全一致(即3.3.4)
  • aws-java-sdk-bundle JAR版本:Hadoop 3.3.4依赖的是1.12.592(该bundle包包含所有AWS SDK依赖,无需单独下载其他模块)

验证PySpark绑定的Hadoop版本

先确认你的PySpark实际绑定的Hadoop版本,避免版本差异:

from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
print(spark.sparkContext._jvm.org.apache.hadoop.util.VersionInfo.getVersion())

输出应为3.3.4(如果是其他版本,需对应调整hadoop-aws版本)

具体操作步骤

  1. 下载对应JAR包:
    获取hadoop-aws-3.3.4.jar和aws-java-sdk-bundle-1.12.592.jar
  2. 配置JAR路径:
    两种方式任选其一:
    • 方式一:将JAR包放到PySpark默认jars目录(路径一般为${CONDA_PREFIX}/lib/python3.12/site-packages/pyspark/jars)
    • 方式二:在SparkSession中手动指定JAR路径:
      from pyspark.sql import SparkSession
      spark = SparkSession.builder \
          .appName("Read from S3") \
          .config("spark.jars", "/path/to/hadoop-aws-3.3.4.jar,/path/to/aws-java-sdk-bundle-1.12.592.jar") \
          .config("spark.hadoop.fs.s3a.access.key", "AWS_ACCESS_KEY") \
          .config("spark.hadoop.fs.s3a.secret.key", "AWS_SECRET_KEY") \
          .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") \
          .config("spark.hadoop.fs.s3a.endpoint", "s3.us-east-1.amazonaws.com")  # 替换为你的S3区域端点
          .getOrCreate()
      
  3. 测试读取S3数据:
    s3_path = "s3a://bucket/file.json"
    df = spark.read.json(s3_path)
    df.show()
    

常见问题排查

  • 若出现ClassNotFoundException:检查hadoop-aws版本是否与Hadoop版本完全一致
  • 若出现NoSuchMethodError:检查aws-java-sdk-bundle版本是否匹配Hadoop对应版本的依赖

替代读取方案

如果不想处理JAR包依赖,可先用boto3下载文件到本地,再用PySpark读取:

import boto3
from pyspark.sql import SparkSession

# 下载S3文件到本地
s3 = boto3.client('s3', aws_access_key_id='AWS_ACCESS_KEY', aws_secret_access_key='AWS_SECRET_KEY')
s3.download_file('bucket', 'file.json', '/tmp/local_file.json')

# PySpark读取本地文件
spark = SparkSession.builder.appName("Read Local File").getOrCreate()
df = spark.read.json('/tmp/local_file.json')
df.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:32:46