目录

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 快的原因:

  1. 内存利用率高: 去掉了 8B 的指针结构(解决hash冲突从拉链法改为开放定址法),能够创建更大的哈希表,冲突减少

  2. 内存紧凑: 位图操作快,可以在插入过程中实现自排序,省去内存排序开销

优化方案

建议将分位值计算的任务改成Spark任务

Spark SQL PERCENTILE分析调研相关推荐

  1. Spark SQL 源代码分析系列

    从决定写Spark SQL文章的源代码分析,到现在一个月的时间,一个又一个几乎相同的结束很快,在这里也做了一个综合指数,方便阅读,下面是读取顺序 :) 第一章 Spark SQL源代码分析之核心流程 ...

  2. 慕课网Spark SQL日志分析 - 4.从Hive平滑过渡到Spark SQL

    4.1 SQLContext/HiveContext/SparkSesson 1.SQLContext 老版本文档:spark.apache.org/docs/1.6.1/ SQLContext示例文 ...

  3. 使用outputstream写到指定位置_MaxCompute Spark与Spark SQL对比分析及使用注意事项

    以下内容根据演讲视频以及PPT整理而成. 本次分享主要围绕以下三个方面: 一.功能特性 二.代码开发 三.DataWorks模式 一.功能特性 1.Spark部署模式 Spark开源文档中表明部署模式 ...

  4. Flume+Spark+Hive+Spark SQL离线分析系统

    前段时间把Scala和Spark一起学习了,所以借此机会在这里做个总结,顺便和大家一起分享一下目前最火的分布式计算技术Spark!当然Spark不光是可以做离线计算,还提供了许多功能强大的组件,比如说 ...

  5. Spark SQL Catalyst源代码分析之TreeNode Library

    /** Spark SQL源代码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心执行流程.SqlParser,和Analyzer,本来打算直接写Optimizer的,可是发 ...

  6. Spark SQL Catalyst源代码分析Optimizer

    /** Spark SQL源代码分析系列*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程.SqlParser,和Analyzer 以及核心类库TreeNode,本文将具体解说S ...

  7. Spark SQL之External DataSource外部数据源(二)源代码分析

    上周Spark1.2刚公布,周末在家没事,把这个特性给了解一下,顺便分析下源代码,看一看这个特性是怎样设计及实现的. /** Spark SQL源代码分析系列文章*/ (Ps: External Da ...

  8. spark SQL学习(综合案例-日志分析)

    日志分析 scala> import org.apache.spark.sql.types._ scala> import org.apache.spark.sql.Rowscala> ...

  9. Spark SQL 处理流程分析 (一)

    下面的代码演示了通过Case Class进行表Schema定义的例子: // sc is an existing SparkContext. val sqlContext = new org.apac ...

最新文章

  1. 生物学专业_北京交通大学617生物化学20082011历年考研专业课真题汇编
  2. cisco+++mysql_搭建cacti监控linux服务器,cisco,华为,mysql,
  3. webpack加载postcss,以及autoprefixer的loader
  4. sqlserver 储存过程 批量更新_大白菜怎么储存过冬,好吃还不烂?掌握方法,其实很简单...
  5. C++/C--浮点型数据的二进制表示及其内存存储形式
  6. 极客c语言课程设计,c语言课程设计之实习报告共5天完整.doc
  7. 【C++快速入门】基础语法篇
  8. java数据库实体层封装_Java通过JDBC封装通用DAO层
  9. 入侵感知系列之弱口令检测思路
  10. MIT 最新 AI 医疗系统公布:“重症监护室干预” 与”电子医疗档案模型迁移“...
  11. java opencv 计算滑块横移距离
  12. 360勒索病毒补丁,不能访问共享修复
  13. pcduino_arm_rtl8187L 驱动安装编译过程
  14. 2. webpack 处理 css less sass scss styl 资源
  15. python Pystaller 将python文件打包成exe
  16. 各大浏览器兼容性问题
  17. 企业视频直播如何嵌入企业微信公众号?
  18. Python爬虫实战(02)—— 爬取诗词名句三国演义
  19. 查看服务器ip修改记录,如果查看服务器ip地址和修改ip
  20. gensim : AttributeError: The vocab attribute was removed from KeyedVector in Gensim 4.0.0.

热门文章

  1. git 的详细使用 操作暂存区
  2. UVa Problem 10310 Dog and Gopher (狗拿地鼠)
  3. 路由基础(Routing)
  4. 周易六十四卦——风火家人卦
  5. googleapis.com替换CDN
  6. 微信公众号html怎么做的,微信公众平台页面模板怎么用?分类目录页面是如何制作的?...
  7. 惊爆:江民公司官方网站今日被黑
  8. 前程似锦 如鱼得水 藏头诗
  9. [C++] printf pitfall
  10. Win10系统下Microsoft Office (Excel, word等)无法保存的问题