AWS Glue PySpark读取S3 CSV报org/jets3t/service/ServiceException错误问询
问题结论
你需要手动引入jets3t相关jar包来解决当前报错。
报错根因
你在代码中主动配置了Hadoop使用旧版s3native文件系统实现:
sch.set("fs.s3.impl","org.apache.hadoop.fs.s3native.NativeS3FileSystem")
该实现依赖jets3t类库,而当前运行环境中缺少该依赖,直接触发了ClassNotFoundException异常。
Scala Spark与PySpark依赖差异原因
- AWS Glue的Scala Spark运行环境预装的依赖传递包含jets3t组件,通常由旧版Hadoop客户端或AWS SDK相关依赖间接引入,因此可以直接调用s3native实现。
- Glue的PySpark运行环境对预装依赖做了裁剪,仅保留PySpark常用的核心运行依赖,jets3t作为已被废弃的s3native协议的配套依赖,没有纳入默认预装列表,因此无法直接调用。
更优的解决方案(无需额外引入jar包)
s3native是已经被淘汰的S3访问协议,AWS Glue默认已经预装了更稳定的s3a协议实现,你只需要删掉代码中两行手动配置的Hadoop参数即可正常运行,无需额外引入依赖:
# 移除以下两行配置即可 # sch.set("fs.s3.impl","org.apache.hadoop.fs.s3native.NativeS3FileSystem") # sch.set("fs.s3.canned.acl","BucketOwnerFullControl")
如果确实有特殊场景必须使用s3native协议,你可以下载对应版本的jets3t jar包上传到S3,在Glue任务配置的「依赖JAR包路径」中填写该jar的S3路径即可。
内容的提问来源于stack exchange,提问作者Harsh P Waghela
相关产品推荐
相关产品推荐

