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

Spark读取本地部署S3兼容对象存储文件时报UnsupportedOperationException异常

错误根因

你已经正确配置了S3AFileSystem的相关参数,但读取路径使用了https://前缀,导致Hadoop没有匹配到S3A文件系统实现,反而调用了默认的HttpsFileSystem,该类没有实现listStatus方法,直接抛出了UnsupportedOperationException,和你使用read.text还是read.csv的读取方式无关。

修复方案

  • 修改路径格式,将https://前缀替换为s3a://
  • 新增S3 endpoint的配置项,把原来路径里的域名挪到配置中
  • 注意S3A路径的标准格式为s3a://<bucket名称>/<对象路径>

修正后完整代码

from pyspark.sql import SparkSession


spark = SparkSession.builder \
            .appName("s3reader") \
            .getOrCreate()

sc = spark.sparkContext

sc._jsc.hadoopConfiguration().set("fs.s3a.path.style.access", "true")
sc._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key","xxxxxxxxxxxx")
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "xxxxxxxxxxxxxx")
sc._jsc.hadoopConfiguration().set("fs.s3a.connection.ssl.enabled", "true")
# 新增endpoint配置,替换为你实际的S3服务域名
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "s3a.us-east-1.xxxx.xxxx.xxxx.com")

# 路径修改为s3a前缀,bronze为bucket名称
df = spark.read.text("s3a://bronze/xxxxxxx/test.txt")

print(df)

额外注意事项

  • 请确保你的Spark运行环境中已经放置了和Hadoop版本匹配的hadoop-aws、aws-java-sdk依赖包,否则会触发S3AFileSystem类找不到的错误
  • 如果你的私有S3服务使用自签名SSL证书,需要额外配置fs.s3a.connection.ssl.enabled为false,或者将证书导入JVM信任库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:36:03