aws在写入时的粘合性能

31moq8wy  于 2021-07-09  发布在  Spark
关注(0)|答案(2)|浏览(275)

在执行连接和聚合之后,我希望输出在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
polkgigr

polkgigr1#

如果目标是只有一个文件,则使用合并而不是重新分区,这样可以避免数据混乱。

8tntrjer

8tntrjer2#

而不是使用df.repartition(1)
使用df.repartition(“choice”)

df= df.repartition("choice")
glueContext.write_dynamic_frame.from_options(
    frame = df,
    connection_type = "s3", 
    connection_options = {
        "path": "s3://s3path"
        "partitionKeys": ["choice"]
        }, 
    format = "csv",  
    transformation_ctx = "datasink2")

相关问题