Spark SQL PERCENTILE分析调研
目录
Spark percentile原理
Hive percentile
Spark percentile
优化方案
Spark percentile原理
https://zhuanlan.zhihu.com/p/340626739
https://www.cnblogs.com/myseries/p/10880641.html
Hive percentile
采用的是特殊的数据结构,先通过一轮聚合把每个数值出现的次数用元组的形式存储起来,再通过内存中元组的取值排序取到分位值。所以 Hive 需要在 UDAF 的计算中将数据进行压缩或预处理,那么 Mapper 是需要在生成时不断通过聚合计算更新,其内部实现基于 histogram。
数据集:
[1, 1, 1, 2, 2, 2, 3, 4, 4, 5, 6, 7, 8, 9, 9, 10, 10]
histogram :
[(1, 3), (2, 3), (3, 1), (4, 2), (5, 1), (6, 1), (7, 1), (8, 1), (9, 2), (10, 2)]
分析:这里的开销主要在一次聚合时,由于通常作为分位数字段数据较为分散,因此第一步需要分组聚合组成histogram,第二步将histogram移到一个节点中进行排序取分位值
Spark percentile
在hive percentile的基础上将(key,countValue)的结构替换成bitmap数组+countValue数组,通过把位索引改成bitmap结构来节省一些时间和空间上的开销。
仅接受 Int, Long,精确计算,底层用 OpenHashMap 计数,然后排序key。
OpenHashMap 为了加快速度,增加了一个假设:
所有数据只插入 Key /更新 Key,不删除 Key。
这个假设在大数据处理/统计的场景下,大多都是成立的。
可以去掉拉链表,使用线性探测的开放定址法来实现哈希表。
OpenHashSet 快的原因:
内存利用率高: 去掉了 8B 的指针结构(解决hash冲突从拉链法改为开放定址法),能够创建更大的哈希表,冲突减少
内存紧凑: 位图操作快,可以在插入过程中实现自排序,省去内存排序开销
优化方案
建议将分位值计算的任务改成Spark任务
Spark SQL PERCENTILE分析调研相关推荐
- Spark SQL 源代码分析系列
从决定写Spark SQL文章的源代码分析,到现在一个月的时间,一个又一个几乎相同的结束很快,在这里也做了一个综合指数,方便阅读,下面是读取顺序 :) 第一章 Spark SQL源代码分析之核心流程 ...
- 慕课网Spark SQL日志分析 - 4.从Hive平滑过渡到Spark SQL
4.1 SQLContext/HiveContext/SparkSesson 1.SQLContext 老版本文档:spark.apache.org/docs/1.6.1/ SQLContext示例文 ...
- 使用outputstream写到指定位置_MaxCompute Spark与Spark SQL对比分析及使用注意事项
以下内容根据演讲视频以及PPT整理而成. 本次分享主要围绕以下三个方面: 一.功能特性 二.代码开发 三.DataWorks模式 一.功能特性 1.Spark部署模式 Spark开源文档中表明部署模式 ...
- Flume+Spark+Hive+Spark SQL离线分析系统
前段时间把Scala和Spark一起学习了,所以借此机会在这里做个总结,顺便和大家一起分享一下目前最火的分布式计算技术Spark!当然Spark不光是可以做离线计算,还提供了许多功能强大的组件,比如说 ...
- Spark SQL Catalyst源代码分析之TreeNode Library
/** Spark SQL源代码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心执行流程.SqlParser,和Analyzer,本来打算直接写Optimizer的,可是发 ...
- Spark SQL Catalyst源代码分析Optimizer
/** Spark SQL源代码分析系列*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程.SqlParser,和Analyzer 以及核心类库TreeNode,本文将具体解说S ...
- Spark SQL之External DataSource外部数据源(二)源代码分析
上周Spark1.2刚公布,周末在家没事,把这个特性给了解一下,顺便分析下源代码,看一看这个特性是怎样设计及实现的. /** Spark SQL源代码分析系列文章*/ (Ps: External Da ...
- spark SQL学习(综合案例-日志分析)
日志分析 scala> import org.apache.spark.sql.types._ scala> import org.apache.spark.sql.Rowscala> ...
- Spark SQL 处理流程分析 (一)
下面的代码演示了通过Case Class进行表Schema定义的例子: // sc is an existing SparkContext. val sqlContext = new org.apac ...
最新文章
- 生物学专业_北京交通大学617生物化学20082011历年考研专业课真题汇编
- cisco+++mysql_搭建cacti监控linux服务器,cisco,华为,mysql,
- webpack加载postcss,以及autoprefixer的loader
- sqlserver 储存过程 批量更新_大白菜怎么储存过冬,好吃还不烂?掌握方法,其实很简单...
- C++/C--浮点型数据的二进制表示及其内存存储形式
- 极客c语言课程设计,c语言课程设计之实习报告共5天完整.doc
- 【C++快速入门】基础语法篇
- java数据库实体层封装_Java通过JDBC封装通用DAO层
- 入侵感知系列之弱口令检测思路
- MIT 最新 AI 医疗系统公布:“重症监护室干预” 与”电子医疗档案模型迁移“...
- java opencv 计算滑块横移距离
- 360勒索病毒补丁,不能访问共享修复
- pcduino_arm_rtl8187L 驱动安装编译过程
- 2. webpack 处理 css less sass scss styl 资源
- python Pystaller 将python文件打包成exe
- 各大浏览器兼容性问题
- 企业视频直播如何嵌入企业微信公众号?
- Python爬虫实战(02)—— 爬取诗词名句三国演义
- 查看服务器ip修改记录,如果查看服务器ip地址和修改ip
- gensim : AttributeError: The vocab attribute was removed from KeyedVector in Gensim 4.0.0.
热门文章
- git 的详细使用 操作暂存区
- UVa Problem 10310 Dog and Gopher (狗拿地鼠)
- 路由基础(Routing)
- 周易六十四卦——风火家人卦
- googleapis.com替换CDN
- 微信公众号html怎么做的,微信公众平台页面模板怎么用?分类目录页面是如何制作的?...
- 惊爆:江民公司官方网站今日被黑
- 前程似锦 如鱼得水 藏头诗
- [C++] printf pitfall
- Win10系统下Microsoft Office (Excel, word等)无法保存的问题