写了一段非常简单的SQL。 数据量级一天大约5千万,拉取的30天的数据,按天 count(distinct)计算一系列指标。原本以为执行的效率会很快,结果发现运行了2h!所有探究其为什么运行慢,以及后续该如何规避这类问题。Spark使用的版本是3.x,SQL示例如下:
SELECT dt
, COUNT(DISTINCT a) as uv -- 用户数
, COUNT(DISTINCT b) as pay_uv_1d
, ... 类似诸如此类的count distinct 一共有30多个指标
FROM
(
SELECT *
FROM table
WHERE dt BETWEEN DATE_SUB('${dt}',29) AND '${dt}'
) tmp
GROUP BY dt
单个count distinct 和普通的shuffle类型,经历map端预聚合,然后shuffle到reduce端最终聚合的方式,就把最终的结果给统计出来了。
单个count distinct 执行原理:
Partial: 局部数据的聚合。会


1697

被折叠的 条评论
为什么被折叠?



