Spark分区器浅析
2024-10-17 13:07:24
分区器作用:决定该数据在哪个分区
概览:
- 仅仅只有pairRDD才可能持有分区器,普通RDD的分区器为None
- 在分区器为None时RDD分区一般继承至父RDD分区
- 初始RDD分区数:
- 由集合创建,RDD分区数为cores总数
- 由本地文件创建,RDD分区数为本地文件分片数
- 由HDFS文件创建,RDD分区数为block数
1、HashPartitioner
计算公式:x=key.hashcode%分区数,如果为正 x即该数据所在分区,如果为负 x+总分区数 即为当前key所在分区
触发情况:
reducebykey,groupbykey,join等算子会自动调用
通过Partitionby设置
2、RangePartitioner
原理:通过水塘抽样法确定key值分区后分区临界点,再划分
水塘抽样算法原理:https://www.cnblogs.com/strugglion/p/6424874.html
注意:采样中需要collect,所以会触发action
触发情况:sortbykey
3、自定义分区
基础Partitioner,设定分区数和分区方法
class MyPartitioner(n: Int) extends Partitioner{
override def numPartitions: Int = n override def getPartition(key: Any): Int = {
val k = key.toString.toInt
k / 100
}
}
最新文章
- python+Eclipse+pydev环境搭建
- cocos2dx骨骼动画Armature源码分析(二)
- 关于sharepoint2013的SPUtility.GetGenericSetupPath()方法过期解决办法
- Java算法-插入排序
- Linux 信号量大全
- 三分 --- CSU 1548: Design road
- OLE填充EXCEL
- 在oracle中通过链接服务器(dblink)访问sql server
- 【Spark学习】Apache Spark安全机制
- pomelo组件..
- 代码设置layout_weight attribute
- C++几个小函数
- threejs - uv 映射 简要
- 自定义ListView android
- GHSpro文件上传
- opencv 图像矫正
- Go 初体验 - 令人惊叹的语法 - defer.1 - 基本概念和用法
- JavaScript--fullPage.js插件
- 解决IntelliJ IDEA无法读取配置*.properties文件的问题
- rabbitmq使用方法(一)