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

如何在AWS Glue ETL作业Python脚本中添加文件名规则

AWS Glue ETL脚本配置自定义文件名规则(dostrp*.csv.gz)

要让Glue作业输出到S3的文件以dostrp*.csv.gz格式命名,你需要调整脚本的输出逻辑——因为Glue默认的write_dynamic_frame.from_options会使用Spark默认的分区文件名格式(如part-00000-xxxx.csv.gz),所以需要通过Spark的配置参数自定义文件名前缀,再结合DataFrame写入实现需求。

修改后的完整脚本

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

args = getResolvedOptions(sys.argv, ['target_BucketName', 'JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
# 设置输出文件名前缀为dostrp
spark.conf.set("spark.sql.files.outputNamePrefix", "dostrp")
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

outputbucketname = args['target_BucketName']

# 从Data Catalog读取数据
AWSGlueDataCatalog_node188777777 = glueContext.create_dynamic_frame.from_catalog(
    database="xxxx", 
    table_name="xxxx", 
    transformation_ctx="AWSGlueDataCatalog_node887777777"
)

# 将DynamicFrame转换为Spark DataFrame
df = AWSGlueDataCatalog_node188777777.toDF()

# 写入S3,指定分隔符、压缩格式,生成dostrp*.csv.gz格式的文件
df.write.option("sep", "|") \
        .option("compression", "gzip") \
        .mode("overwrite") \
        .csv(outputbucketname, header=False)

job.commit()

关键配置说明

  • spark.sql.files.outputNamePrefix参数:设置这个Spark配置项后,输出的文件名会以指定的dostrp为前缀,后续自动拼接分区标识(如dostrp-00000-abc123.csv.gz),完全符合dostrp*.csv.gz的命名规则。
  • DataFrame写入逻辑:将Glue DynamicFrame转换为Spark DataFrame后,使用Spark原生的write.csv方法,直接指定分隔符、压缩格式和输出路径。如果需要输出表头,只需将header=False改为header=True。
  • 写入模式:示例中使用mode("overwrite")覆盖目标路径下的现有文件,你可以根据需求改为append(追加)或ignore(忽略)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:15:07