Glue中PySpark读取S3 CSV文件报错:路径不存在
排查AWS Glue中PySpark读取S3 CSV文件路径不存在的问题
以下是针对你遇到的AnalysisException: Path does not exist错误的排查方向和解决办法:
1. 文件名后缀缺失(最可能的原因)
你的get_file_name函数返回的文件名是export_incr_20230611183316(不带.csv后缀),但报错信息中显示的目标文件是export_incr_20230611183316.csv。拼接后的Spark读取路径会缺少.csv后缀,导致路径无效。
修改代码,确保拼接路径时带上后缀:
# 方案1:传入带后缀的文件名 toName_csv = "export_incr_20230611183316.csv" myfile = get_file_name(bucket, directory_remote, toName_csv) # 方案2:拼接路径时手动添加后缀 df = spark.read.options(header='true').csv( f"s3://{bucket}/{directory_remote}/{myfile}.csv", schema=schema )
2. 检查Glue作业的IAM角色权限
虽然你的boto3函数能成功访问S3文件,但Glue作业使用的IAM角色可能没有该S3路径的s3:GetObject权限。检查该角色的权限策略,确保包含以下内容:
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::kp-landing-dev/input/kp/kp/*" }
3. 尝试使用s3a://协议路径
部分情况下,Spark在Glue环境中对s3://协议的解析可能存在问题,换成s3a://协议试试:
df = spark.read.options(header='true').csv( f"s3a://{bucket}/{directory_remote}/{myfile}.csv", schema=schema )
4. 验证路径大小写和特殊字符
S3存储桶和路径是大小写敏感的,确保你的代码中使用的桶名、目录路径和文件名与S3中的完全一致,没有多余的空格或特殊字符。
5. 检查是否存在前缀匹配的文件夹
如果S3中存在与文件名同名的文件夹,Spark可能会将其识别为目录而非文件。可以通过S3控制台确认目标路径下的对象是文件而非文件夹。
内容的提问来源于stack exchange,提问作者marie20
相关产品推荐
相关产品推荐

