如何使用Glue动态指定S3路径,按指定格式生成数据写入路径
Glue动态生成指定格式S3写入路径方案
现有代码问题修复
你当前的路径拼接代码缺少+运算符,会触发语法报错,首先提供两种正确的拼接写法:
- 修复原有加号拼接逻辑:
s3_target_path = 's3://' + target_bucket_name + '/' + database + '/' + schema + '/' + table + '/' + year + '/' + month + '/' + day
- 更推荐f-string写法,可读性更高、漏写符号的概率更低:
# Python3 环境(Glue PySpark默认支持) s3_target_path = f"s3://{target_bucket_name}/{database}/{schema}/{table}/{year}/{month}/{day}"
可选优化点
- 为了避免从配置读取的参数携带多余的斜杠导致路径异常,可以给每个参数加去首尾斜杠的处理:
s3_target_path = f"s3://{target_bucket_name.strip('/')}/{database.strip('/')}/{schema.strip('/')}/{table.strip('/')}/{year}/{month}/{day}"
- 如果需要统一日期格式(比如月份、日期补前导零,把
9转为09),可以对日期变量做格式化处理:
s3_target_path = f"s3://{target_bucket_name}/{database}/{schema}/{table}/{year}/{month.zfill(2)}/{day.zfill(2)}"
Dynamic Frame写入S3示例
拼接好路径后,直接将路径传入Glue的写方法即可,参考代码如下:
from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) # 此处替换为你自己的源Dynamic Frame变量名 glueContext.write_dynamic_frame.from_options( frame = source_dynamic_frame, connection_type = "s3", connection_options = {"path": s3_target_path}, format = "parquet" # 可替换为csv、json等你需要的存储格式 )
内容的提问来源于stack exchange,提问作者RJ7
相关产品推荐
相关产品推荐

