【问题标题】:Spark on AWS EMR - Dynamic partition overwrite S3 / GlueAWS EMR 上的 Spark - 动态分区覆盖 S3 / Glue
【发布时间】:2021-08-28 14:40:16
【问题描述】:

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

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

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

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

【问题讨论】:

  • 难以置信。覆盖不起作用是什么意思。 S3 是一个对象存储并使用版本控制。
  • .partitionBy 子句缺失?
  • @thebluephantom 非常确定 .partitionBy 给出了一个错误,指出 insertInto 在同一个写入语句中不能与 partitionBy 一起使用。此外,我认为需要将 s3 路径指定为写入选项才能真正写入 s3
  • 有趣。好吧,我在非 S3 中使用过没有问题。通过 EMRFS 通过 AWS EMR 的 S3 可以做到这一点。 S3 的事情确实是真的!
  • partitionBy...反正我总是用它。

标签: apache-spark amazon-s3 pyspark amazon-emr


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2018-05-13
    • 1970-01-01
    相关资源
    最近更新 更多