首页 > 解决方案 > 如何控制 Spark SQL 查询的输出文件数?

问题描述

从 Spark SQL SELECT 创建表,我们最终会生成太多文件。我们如何限制它们?

标签: sqlapache-sparkapache-spark-sql

解决方案


从 spark 2.4 开始,您可以提示查询以控制输出:

INSERT ... SELECT /*+ COALESCE(numPartitions) */ ...
INSERT ... SELECT /*+ REPARTITION(numPartitions) */ ...

例如,这将生成 5 个文件:

CREATE TABLE business.clients
AS 
SELECT /*+ REPARTITION(5) */
       client_id,
       country,
       wallet
FROM business.users;

在 Spark 2.4 之前,一种方法是限制整个查询的分区数量:

SET spark.sql.shuffle.partitions = 5;

但这可能会影响过程性能。

更多信息在这里https://issues.apache.org/jira/browse/SPARK-24940


推荐阅读