Google Colab中PySpark读取S3桶CSV报AnalysisException路径不存在如何解决
问题解决步骤
1. 先验证S3文件链接可用性
首先执行以下Colab命令,排除S3公共权限配置失效、路径错误问题:
!wget -O test.csv "https://bucket-name.s3.amazonaws.com/filename.csv" !ls -l test.csv
如果执行后出现403、404错误,说明S3端配置有误,需要检查:
- 桶的「阻止所有公共访问」开关已完全关闭
- 对应CSV文件的ACL已给匿名用户开放
s3:GetObject权限 - 桶策略未限制访问来源IP、账号等规则
- 链接中的桶名、文件名大小写和S3实际配置完全一致,S3路径大小写敏感
2. 调整PySpark读取代码
如果上一步可以正常下载到文件,选择以下任意一种方案修复即可:
方案1:修复SparkFiles调用逻辑
增加路径校验步骤,确认文件下载完成后再读取:
from pyspark import SparkFiles url = "https://bucket-name.s3.amazonaws.com/filename.csv" spark.sparkContext.addFile(url) # 校验文件是否成功下载到临时目录 file_path = SparkFiles.get("filename.csv") !ls {file_path} # 读取文件 df = spark.read.csv(file_path, sep=",", header=True) df.show()
方案2:使用S3A协议直接读取(更稳定)
直接配置Spark的S3连接器读取,不需要中转下载到临时目录,适配S3场景:
# 配置S3匿名访问权限 spark._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider") # 非us-east-1区域的桶可补充配置对应区域端点,示例: # spark._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "s3.cn-north-1.amazonaws.com.cn") # 直接读取S3路径文件 s3_file_path = "s3a://bucket-name/filename.csv" df = spark.read.csv(s3_file_path, sep=",", header=True) df.show()
内容的提问来源于stack exchange,提问作者Ciara Spencer
相关产品推荐
相关产品推荐

