首页 > 解决方案 > AWS EMR 上的 Spark - 动态分区覆盖 S3 / Glue

问题描述

我正在使用 AWS EMR 笔记本中的 pyspark,并希望在保存表时覆盖单个分区。通常可以这样做

df.write.mode('overwrite')\
            .option("partitionOverwriteMode", "dynamic")\
            .insertInto('table')

但是,这在写入 S3 时不起作用。有没有办法只覆盖该 S3 分区中的文件以及火花元数据中的文件?

注意:我使用 Glue 作为火花元数据

标签: apache-sparkamazon-s3pysparkamazon-emr

解决方案


请检查您使用的火花版本。从 2.3.0 版本开始,Spark 允许覆盖相关分区 -> 'dynamic' 模式,但默认设置是使用 'static' 这将删除该位置的所有分区。

从 AWS 文档看来,从 EMR 5.21.0 开始,默认行为是“动态”模式。我验证了 EMR 5.21.0 默认不会覆盖该位置的所有分区。

AWS 文档: “在 Spark 2.4.0 中引入了 partitionOverwriteMode 写入选项。对于包含在 Amazon EMR 版本 5.19.0 中的 Spark 版本 2.3.2,设置 spark.sql.sources.partitionOverwriteMode 属性。”


推荐阅读