当前位置: 首页 > news >正文

全球十大网站排名重庆网站设计总部

全球十大网站排名,重庆网站设计总部,现在建设一个网站还能够赚钱吗,商城网站免费建设文章目录 预备 数据和执行语句Expand第一次HashAggregateShuffle and Second HashAggregate最后结果性能原文 预备 数据和执行语句 SELECT COUNT(*), SUM(items), COUNT(DISTINCT product), COUNT(DISTINCT category) FROM orders;假设源数据分布在两个1核的结点上&#xff0…

文章目录

  • 预备 数据和执行语句
  • Expand
  • 第一次HashAggregate
  • Shuffle and Second HashAggregate
  • 最后结果
  • 性能
  • 原文

预备 数据和执行语句

SELECT COUNT(*), SUM(items), COUNT(DISTINCT product), COUNT(DISTINCT category) 
FROM orders;

假设源数据分布在两个1核的结点上,数据就8行

Expand

spark把count distinct操作转换成count操作。

第一步是对每个要count distinct的列,生成新的行(这里是product和category列),当然原来不需要distinct聚合的列也在。

原来items列不需要distinct,product和category列要distinct,所以数据膨胀了2倍。原来8条数据,现在是8*(1+2)=24条

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

spark加了gid这一列,值为0代表所有非distinct聚合(这里是count(*)和sum(items)),值为1和2分别代表其他distinct聚合(这里1代表product,2代表category)。

NULL是怎么赋值的:对输入列来说,每行只有1个非空值。在spark的物理执行计划中,可以看到操作是这样的

  ExpandInput: [product, category, items]Arguments: [[null, null, 0, items],[product, null, 1, null],[null, category, 2, null]]

第一次HashAggregate

Spark使用所有count distinct的列和gid作为关键字(product、category和gid)对行进行局部散列,并对非distinct的聚合(count(*)和SUM(items))执行局部局部聚合:

相当于执行了select product,category,gid,count(*) cnt,sum(items) items from 膨胀后的表 group by product,category,gid

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这可以使得膨胀后的数据变小。

如果不同值的数量比较少,减少的数据是相当可观的,最终结果可能比原始数据还要少。

可以看到原来每个结点上有4行,膨胀后是12行,局部聚合后变成了6行。

Shuffle and Second HashAggregate

在每个结点内部HashAggregate后,经过shuffle后变成这样

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

重新再每个结点做局部shuffle,得到

(相当于执行了select product,category,gid,count(*) cnt,sum(items) items from 膨胀后的表 group by product,category,gid

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这一步使得所有键都变成了唯一的。

最后结果

现在所有行可以合并成一个partition,再次HashAggregation,但这次不用group by product, category和gid

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在再也没有重复值了,简单的count和根据gid筛选就可以得到想要的count distinct结果

  cnt FILTER (WHERE gid = 0),sum FILTER (WHERE gid = 0),COUNT(product) FILTER (WHERE gid = 1),COUNT(category) FILTER (WHERE gid = 2)

Result:

  COUNT(*):                  8SUM(items):              120COUNT(DISTINCT product):   4COUNT(DISTINCT category):  2

性能

  • 如果不同值的数量比较少,那么即使膨胀后,最后要shuffle的行也很少,这样因为spark局部聚合的原因,count distinct是相对比较快的
  • 如果不同值的数量很多,并且你在一个语句中使用多个count distinct对不同的列。那么要shuffle行因为膨胀会很多,局部聚合也不能有效遏制数据的膨胀,那么要让查询语句成功执行需要消耗更多的executor内存。

原文

Distributed COUNT DISTINCT – How it Works in Spark, Multiple COUNT DISTINCT, Transform to COUNT with Expand, Exploded Shuffle, Partial Aggregations – Large-Scale Data Engineering in Cloud (cloudsqale.com)

http://www.yayakq.cn/news/225153/

相关文章:

  • 顺德手机网站设计价位设计师培训班
  • 深圳网站制作必选祥奔科技网络系统管理是做什么的
  • 程序员做网站类网站搜索引擎优化的简称
  • 什么是可信网站认证做网站的收费标准
  • wordpress安装语言设置关键词优化流程
  • 卡地亚手表官方网站查询网站续费一年多少钱
  • 找别人做网站wordpress 主题 新闻_
  • 世界网站流量排名注册网站挣钱
  • 黑群晖建设个人网站庆网站制作公司
  • 外贸自建站的推广方式百度推广销售话术
  • 山东做网站的杭州市萧山区哪家做网站的公司好
  • 学校网站 网站建设搭建网站服务器教程
  • 手机网站建设创意新颖外包一个企业网站多少钱
  • 招聘门户网站有哪些毕业设计做网站有哪些方面
  • 百度自己网站排名网站架构文案
  • 网站浏览图片怎么做百度号码认证申诉平台
  • 广州网站开发公司哪家好seo优化培训多少钱
  • 专业的聊城网站建设怎么做能让网站尽快收录
  • 二维码生成器在线制作免费外贸seo博客
  • 网站建设学习流程企业黄页电话
  • 新网站的建设工作图书馆网站建设调查问卷
  • 搜狗网站排名怎么做株洲企业关键词优化最新报价
  • 九江做网站的公司赣州seo外包怎么收费
  • 商业网站图片企业站seo外包
  • 可以左右滑动的网站wordpress临时关闭页面
  • ps网站建设教程鹤山网站建设易搜互联
  • 商业网站开发实训总结各大网站做推广广告
  • 专业建站培训深圳网站建设行吗
  • 网站提高收录和访问量网站开发技术概述
  • 网站推广做哪个比较好可以做淘宝联盟的免费网站