apache-spark - AWS EMR 上的 Spark - 动态分区覆盖 S3 / Glue
问题描述
我正在使用 AWS EMR 笔记本中的 pyspark,并希望在保存表时覆盖单个分区。通常可以这样做
df.write.mode('overwrite')\
.option("partitionOverwriteMode", "dynamic")\
.insertInto('table')
但是,这在写入 S3 时不起作用。有没有办法只覆盖该 S3 分区中的文件以及火花元数据中的文件?
注意:我使用 Glue 作为火花元数据
解决方案
请检查您使用的火花版本。从 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 属性。”
推荐阅读
- android - 使用 Mircosoft 图形 REST API 进行自动发现
- html - href vs 链接反应?JS 不是基于 HTML 标签加载的
- php - 从一个表中获取数组数据并插入到另一个表中
- python - 如何从嵌套元组列表中生成批量数据?
- javascript - Javascript用0替换最后一个数字而不是用指数符号表示数字
- sql - 基于某些内容的总和表
- java - 通过 jni 从 Java 调用时,C++ iostreams 不起作用
- c# - 通过在redis缓存中传递一个键来获取多个值
- r - 有没有办法创建一个带有 n 种颜色的 ggplot 多面散点图,以便颜色交替或从调色板中随机化?
- java - 在没有 web.xml 的 Spring 应用程序中使用过滤器(在外部 JAR 中)