分区器作用:决定该数据在哪个分区

概览:

  1. 仅仅只有pairRDD才可能持有分区器,普通RDD的分区器为None
  2. 在分区器为None时RDD分区一般继承至父RDD分区
  3. 初始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
}
}

最新文章

  1. python+Eclipse+pydev环境搭建
  2. cocos2dx骨骼动画Armature源码分析(二)
  3. 关于sharepoint2013的SPUtility.GetGenericSetupPath()方法过期解决办法
  4. Java算法-插入排序
  5. Linux 信号量大全
  6. 三分 --- CSU 1548: Design road
  7. OLE填充EXCEL
  8. 在oracle中通过链接服务器(dblink)访问sql server
  9. 【Spark学习】Apache Spark安全机制
  10. pomelo组件..
  11. 代码设置layout_weight attribute
  12. C++几个小函数
  13. threejs - uv 映射 简要
  14. 自定义ListView android
  15. GHSpro文件上传
  16. opencv 图像矫正
  17. Go 初体验 - 令人惊叹的语法 - defer.1 - 基本概念和用法
  18. JavaScript--fullPage.js插件
  19. 解决IntelliJ IDEA无法读取配置*.properties文件的问题
  20. rabbitmq使用方法(一)

热门文章

  1. Python语法之选择和循环(if、while)
  2. zabbix 批量安装+自动注册
  3. Openswan支持的算法及参数信息:
  4. ubuntu安装glusterFS
  5. IIS中配置WCF站点
  6. docker学习笔记(二)--配置镜像加速器
  7. ECMAScript 2021(ES12)新特性简介
  8. PHP的命令行扩展Readline相关函数学习
  9. mysql数据库备份参数
  10. shell 基本语法介绍