问题描述
我想将动态帧作为文本文件写入 S3 并使用“|”作为分隔符。
如何修改下面的代码,以便 glue 将框架保存为 .txt 文件并使用“|”作为分隔符。
glue_context.write_dynamic_frame.from_options(
frame = frame,connection_type = "s3",connection_options = {"path": outpath},format = "csv")
解决方法
Glue 目前不支持 .txt
作为输出。 Here 您可以阅读支持的文件类型。
您可以将 DynamicFrame 转换为 spark 数据帧,并使用 spark 写入选项 sep 将其与分隔符一起保存。
df=frame.toDf()
df.write.option("sep","|").option("header","true").csv(filename)
,
我不确定您为什么要用 .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 之前。