在 Spark SQL 中通过 COALESCE 减少分区

Posted

技术标签:

【中文标题】在 Spark SQL 中通过 COALESCE 减少分区【英文标题】:Reduce Partitions by COALESCE in Spark SQL 【发布时间】:2021-03-30 18:00:45 【问题描述】:

我运行 Spark SQL 查询并使用它们执行数据转换,然后将最终结果集(经过一系列转换步骤后)存储到 S3

我最近注意到我的一项工作是在写入 S3 时创建大量分区文件,并且需要很长时间才能完成(实际上它失败了)。所以我想知道在写入S3之前是否有任何方法可以在SQL API中执行COALESCE之类的函数来减少分区数量?

我知道重新分区的 SQL API 等效项是Cluster By。所以想知道在 SQL API 中是否也有类似的COALESCE 操作。

请注意,我只能访问 SQL API,所以我的问题仅与 Spark SQL API 有关。 (例如SELECT col from TABLE1 WHERE ...)

我们使用 Spark SQL 2.4.6.7

谢谢

【问题讨论】:

【参考方案1】:

docs 建议使用提示来合并分区,例如

SELECT /*+ COALESCE(3) */ col from TABLE1

【讨论】:

谢谢。我看到这是针对 Spark v3.0 的。这也适用于 Spark 2.4 吗? 找到了。它支持2.4。这里的母马信息:jaceklaskowski.gitbooks.io/mastering-spark-sql/content/…

以上是关于在 Spark SQL 中通过 COALESCE 减少分区的主要内容,如果未能解决你的问题,请参考以下文章

Spark中repartition和coalesce的用法

Spark repartition和coalesce的区别

Spark/SQL 2.4 校验和()、md5 等

在 Apache Spark 中通过管道运行 Windows 批处理文件

在Java应用中通过SparkLauncher启动Spark任务

如何在 Spark 1.3 中通过 Hive 指示 SparkSQL 中的数据库