更新时间:2025-06-10 GMT+08:00

Spark Distinct聚合优化

操作场景

当SQL中存在多个count(distinct)聚合函数,且存在cube,rollup等导致数据膨胀的算子时,使用该特性可以有效减少数据的膨胀倍数,且减少shuffle落盘的数据,从而获得性能提升。开启后,count(distinct)算子的实现,将由原来的expand+多轮聚合,变成普通的count_distinct聚合函数。

约束与限制

  • 本章节仅适用于MRS 3.3.1-LTS及之后版本。
  • 作业已配置足够的内存。

配置参数

  1. 安装Spark客户端。

    详细操作请参考安装MRS客户端

  2. 使用客户端安装用户登录Spark客户端节点。

    在Spark客户端的“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”配置文件中进行设置,修改如下参数:

    参数

    参数说明

    取值示例

    spark.sql.keep.distinct.expandThreshold

    由cube等引起的数据膨胀多少倍时,触发该优化。需要配置一个大于0的数值来启用。例如1024,代表数据膨胀1024倍及以上时,触发该优化。

    如果设置为-1,则不启用该优化。

    100

    spark.sql.distinct.aggregator.enabled

    是否强制开启distinct聚合优化。

    • false:关闭强制开启distinct聚合优化。
    • true:启用强制开启distinct聚合优化,将不再受限于数据膨胀倍数的约束,直接改写distinct聚合。注意:请在确保有收益的情况下,谨慎使用此选项。

    false