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

EC2笔记本访问S3文件遇S3AFileSystem找不到错误求助

解决PySpark连接S3时Class org.apache.hadoop.fs.s3a.S3AFileSystem not found错误

问题根源

通过pip install pyspark安装的PySpark默认不包含Hadoop S3A驱动依赖包,导致无法识别S3文件系统类。

修复步骤

1. 修正PySpark安装与导入的错误写法

原命令将安装与导入写在一行是错误的,需分开执行:

!pip install pyspark
import pyspark
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf

2. 临时生效方案(Jupyter会话内)

在创建SparkSession时,直接指定所需的依赖包,Spark会自动下载并加载:

# 配置Spark依赖包,版本需与PySpark对应的Hadoop版本匹配
# 可通过 spark.sparkContext._gateway.jvm.org.apache.hadoop.util.VersionInfo.getVersion() 查看Hadoop版本
conf = SparkConf().setAppName("SMB_classification") \
    .set("spark.jars.packages", "org.apache.hadoop:hadoop-aws:3.3.4,com.amazonaws:aws-java-sdk-bundle:1.12.262")

# 创建SparkSession并配置S3参数
spark = SparkSession.builder.config(conf=conf).getOrCreate()

spark._jsc.hadoopConfiguration().set("fs.s3a.access.key", ACCESS_KEY)
spark._jsc.hadoopConfiguration().set("fs.s3a.secret.key", SECRET_KEY)
spark._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "s3-us-west-2.amazonaws.com")
spark._jsc.hadoopConfiguration().set("com.amazonaws.services.s3.enableV4", "true")
spark._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
spark._jsc.hadoopConfiguration().setInt("fs.s3a.connection.maximum", 100)
spark._jsc.hadoopConfiguration().set("fs.s3a.buffer.dir", "/var/tmp/spark")

# 读取S3上的Parquet文件
df = spark.read.parquet('s3a://s3path/file.parquet')

3. 永久生效方案(全局配置)

如果需要每次启动PySpark都自动加载依赖,可将驱动包下载到PySpark的jars目录:

  1. 查看PySpark安装路径:
!pip show pyspark | grep Location
  1. 下载对应版本的依赖包到jars目录(替换下方路径为上一步得到的Location路径):
# 替换为你的PySpark安装路径
PYSPARK_JARS_DIR="/usr/local/lib/python3.8/dist-packages/pyspark/jars"

# 下载hadoop-aws和aws-java-sdk-bundle包
!wget -P $PYSPARK_JARS_DIR https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.3.4/hadoop-aws-3.3.4.jar
!wget -P $PYSPARK_JARS_DIR https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.12.262/aws-java-sdk-bundle-1.12.262.jar
  1. 重新启动Jupyter后,直接使用配置代码即可连接S3。

关键注意事项

  • hadoop-aws的版本必须与PySpark内置的Hadoop版本一致,版本不匹配会导致新的兼容性错误。
  • 避免重复创建SparkSession,建议先构建配置再初始化SparkSession,而非先创建再修改配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:42:13