数据倾斜之count(distinct)

news/2024/7/3 0:21:56

一、简单count(distinct id)

count(distinct id)

在极大数据量的情况下

从执行计划上面来看:

只生成一个reducer任务,所有的id都聚集到同一个reducer任务进行去重然后在聚合,非常容易造成数据倾斜.

解决方案:

1、利用Hive对嵌套语句的支持,将原来一个MapReduce作业转换为两个作业,

在第一阶段选出全部的非重复id,在第二阶段对选出的非重复id进行计数。

在第一阶段可以通过增大Reduce的并发数,并发处理Map输出。

在第二阶段,对已去重的id进行计数,count(*)在Map阶段不需要输出原id,只输出一个计数结果。

这样即使第二阶段Hive强制指定一个Reduce Task,极少量的Map输出数据也不会使单一的Reduce Task造成oom。

select count(*) from (select distinct id from users)t;

2、group by

select a,count(distinct b) from t group by 

select tt.a,count(tt.b) from (select a,b from t group by a,b)tt group by tt.a

group by将数据分组到了多个reducer上进行处理

distinct:先把b列所有数据保存到内存,速度快,单b列的值形成为key值;

group by:把b列数据排序,空间复杂度就是O(1),时间复杂度是O(nlogn);

比较:distinct耗费内存,效率高,可能产生OOM;

     groupby,排序消耗时间更多,在时间复杂度允许下,空间复杂度更低。

    

二、多count(distinct column)

https://www.jianshu.com/p/9ecf5e96c47f


http://lihuaxi.xjx100.cn/news/1372174.html

相关文章

C语言学习笔记 关键字和保留标识符-08

在C语言中,有一部分词汇比较特殊,它们不能作为标识符(如变量名)。许多关键字用于指定不同的类型,如int。若使用关键字不当,编译器会将其视为语法错误。这其中还有一些保留标识符,C语言已指定了它…

牛客网-刷SQL(10)

题目:现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。 示例:user_profile iddevice_idgenderageuniversitygpaactive_days_within_30question_cntanswer_cnt12138male21北京大学3.4721223214male复旦大学41552…

Yarn与Zookeeper学习

YARN学习 1.YARN是什么? yarn 分配运行资源 mapReduce的运行平台 2.YARN运行过程: 客户端与ResourceManager交互,生成临时配置文件(Application)ResourceManager根据Application信息生成Task然后生成MapReduceApplicationMaster(简称AM)AM…

深入解析 SOCKS5 代理与网络安全

一、SOCKS5 代理技术概述 SOCKS5(Socket Secure 5)代理是 SOCKS 协议的最新版本,它允许客户端在客户端与代理服务器之间建立一个安全通道,并通过此通道发送请求并访问远程服务器。与 HTTP/HTTPS 代理相比,SOCKS5 代理在…

【前端学JAVA】java的基础语法

theme: cyanosis 作为一个前端程序员,其发展前途是远不及后端程序员的。因此,只有了解后端,才能让自己更加具备核心竞争力。本系列教程将以一个前端程序员的角度快速学习JAVA。 新建项目 开发JAVA程序,我们第一步是使用IDEA新建…

操作png图片文件——libpng库——C++

文章目录 读取png、写入png读取一个png文件写入一个png创建一个空白png,改变某个像素点颜色&#xff0c;保存读取一个png,改变指定像素点颜色&#xff0c;保存 读取png、写入png #include <png.h> int main(int argc, char** argv) {png_image image; /* The control st…

ChatGPT vs. 之前版本:性能与表现的对比

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

IDEA maven 命令行打包 和指令打包的区别

IDEA maven 命令行打包 和指令打包的区别 背景除此之外的打包命令还有如下&#xff1a;相比之下这样打包的好处呢&#xff1a;1. 系统独立性&#xff1a;2. 构建配置灵活性&#xff1a;3. 可移植性&#xff1a;4. 可扩展性&#xff1a; 背景 今天在项目打包的时候被大佬指指点点…