如何在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
相关产品推荐
相关产品推荐

