AWS Glue-如何在 S3 中将动态帧编写为 .txt 文件并使用“|”作为分隔符

Posted

技术标签:

【中文标题】AWS Glue-如何在 S3 中将动态帧编写为 .txt 文件并使用“|”作为分隔符【英文标题】:AWS Glue- how to write dynamic frame in S3 as .txt file and use '|' as the delimiter 【发布时间】:2021-04-08 11:40:59 【问题描述】:

我想将动态帧作为文本文件写入 S3 并使用“|”作为分隔符。

如何修改下面的代码,以便 Glue 将框架保存为 .txt 文件并使用 '|'作为分隔符。

glue_context.write_dynamic_frame.from_options(
        frame = frame,
        connection_type = "s3",    
        connection_options = "path": outpath,
        format = "csv")

【问题讨论】:

【参考方案1】:

您可以将 DynamicFrame 转换为 spark 数据帧,并使用 spark 写入选项 sep 将其与分隔符一起保存。

df=frame.toDf()
df.write.option("sep","|").option("header","true").csv(filename)

【讨论】:

【参考方案2】:

目前在 Glue 中,您可以将 spark 数据帧转换为 pandas 数据帧,只需:

pandasDF = sparkDF.toPandas()

您可以享受 Pandas 的所有现代舒适。

【讨论】:

【参考方案3】:

Glue 目前支持.txt 作为输出。 Here 你可以阅读支持的文件类型。

【讨论】:

【参考方案4】:

我不完全确定您为什么要使用.txt 扩展名写入数据,但是在您的文件中指定format="csv"。如果您的意思是作为通用文本文件,那么 csv 就是您想要使用的。

Glue DynamicFrameWriter 支持自定义格式选项,这是您需要添加到代码中的内容(另请参阅文档here):

glue_context.write_dynamic_frame.from_options(
    frame=frame,
    connection_type='s3',
    connection_options=
        'path': outpath,
    ,
    format='csv',
    format_options=
        'separator': "|"
        # ...other kwargs
    
)

请注意,DynamicFrameWriter 不允许为您的文件指定名称,并且还会根据执行期间创建的分区数量创建多个输出。

如果你只想要一个输出文件,你必须这样做:

df = df.repartition(1)

在写入 s3 之前。

【讨论】:

以上是关于AWS Glue-如何在 S3 中将动态帧编写为 .txt 文件并使用“|”作为分隔符的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue 抓取动态 S3 路径位置

如何在 AWS 中使用 Glue 作业覆盖 s3 数据

如何使用 AWS Glue 将许多 CSV 文件转换为 Parquet

如何在 AWS-Glue 脚本中编写用户定义的函数?

aws Glue / Redshift 的预过滤解决方案(在加载到 S3 之前)

Python/Pyspark 迭代代码(用于 AWS Glue ETL 作业)