在执行连接和聚合之后,我希望输出在1个文件中,并基于某个列进行分区。当我使用重分区(1)时,作业占用的时间是1小时,如果我删除准备(1)则该文件将有多个分区,需要30分钟(请参阅下面的示例)。有没有办法把数据写入一个文件??
...
...
df= df.repartition(1)
glueContext.write_dynamic_frame.from_options(
frame = df,
connection_type = "s3",
connection_options = {
"path": "s3://s3path"
"partitionKeys": ["choice"]
},
format = "csv",
transformation_ctx = "datasink2")
有没有其他方法可以提高写性能。改变格式有帮助吗?以及如何通过一个文件输出来实现并行性
s3存储示例
**if repartition(1)**// what I want but takes more time
choice=0/part-00-001
..
..
choice=500/part-00-001
**if removed**// takes less time but multiple files are present
choice=0/part-00-001
....
choice=0/part-00-0032
..
..
choice=500/part-00-001
....
choice=500/part-00-0032
2条答案
按热度按时间polkgigr1#
如果目标是只有一个文件,则使用合并而不是重新分区,这样可以避免数据混乱。
8tntrjer2#
而不是使用df.repartition(1)
使用df.repartition(“choice”)