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 将许多 CSV 文件转换为 Parquet