Python 在将镶木保存到AWS s3桶时,如何优化当前pyspark性能?

Python 在将镶木保存到AWS s3桶时,如何优化当前pyspark性能?,python,amazon-s3,pyspark,parquet,amazon-emr,Python,Amazon S3,Pyspark,Parquet,Amazon Emr,在日常管道中,我们需要对一个巨大的数据帧(约2亿行)执行一些计算密集型操作。输出必须保存在多个分区中:item\u release\u year、item\u release\u month、item\u release\u date、shop\u id、execution\u date 操作部分似乎工作得很好(我知道还有很多地方可以改进),但主要的瓶颈是当我保存所有文件时 据我从AWS EMR用户界面了解,计算操作只需20分钟,但整个保存拼花地板过程需要2小时。 如果我看一看拼花步骤中的一

在日常管道中,我们需要对一个巨大的数据帧(约2亿行)执行一些计算密集型操作。输出必须保存在多个分区中:
item\u release\u year、item\u release\u month、item\u release\u date、shop\u id、execution\u date

操作部分似乎工作得很好(我知道还有很多地方可以改进),但主要的瓶颈是当我保存所有文件时

据我从AWS EMR用户界面了解,计算操作只需20分钟,但整个保存拼花地板过程需要2小时。

如果我看一看拼花步骤中的一个,它实际上显示这个阶段仅随机读取56MB数据,这令人惊讶地花费了近5分钟

以下是我们编写文件的方式:

repartition_by = [item_release_year, item_release_month, item_release_date, shop_id, execution_date]
df = df.repartition(10, *repartition_by)
df.write.mode("overwrite").partitionBy(repartition_by).parquet(output_path)
以下是spark配置:

spark = pyspark.sql.SparkSession.Builder().enableHiveSupport()
            .config("hive.exec.dynamic.partition", "true")
            .config("hive.exec.dynamic.partition.mode", "nonstrict")
            .config("spark.driver.maxResultSize", "2g")
            .conf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")
有人能告诉我问题出在哪里吗?我该如何改进它?谢谢大家!