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

概览:

  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
}
}

Spark分区器浅析的更多相关文章

  1. Spark源码分析之分区器的作用

    最近因为手抖,在Spark中给自己挖了一个数据倾斜的坑.为了解决这个问题,顺便研究了下Spark分区器的原理,趁着周末加班总结一下~ 先说说数据倾斜 数据倾斜是指Spark中的RDD在计算的时候,每个 ...

  2. spark自定义分区器实现

    在spark中,框架默认使用的事hashPartitioner分区器进行对rdd分区,但是实际生产中,往往使用spark自带的分区器会产生数据倾斜等原因,这个时候就需要我们自定义分区,按照我们指定的字 ...

  3. 大数据学习day19-----spark02-------0 零碎知识点(分区,分区和分区器的区别) 1. RDD的使用(RDD的概念,特点,创建rdd的方式以及常见rdd的算子) 2.Spark中的一些重要概念

    0. 零碎概念 (1) 这个有点疑惑,有可能是错误的. (2) 此处就算地址写错了也不会报错,因为此操作只是读取数据的操作(元数据),表示从此地址读取数据但并没有进行读取数据的操作 (3)分区(有时间 ...

  4. 【Spark 深入学习-08】说说Spark分区原理及优化方法

    本节内容 ------------------ · Spark为什么要分区 · Spark分区原则及方法 · Spark分区案例 · 参考资料 ------------------ 一.Spark为什 ...

  5. Spark学习之路 (十七)Spark分区

    一.分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务 ...

  6. Spark(十一)Spark分区

    一.分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务 ...

  7. Spark学习之路 (十七)Spark分区[转]

    分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务的个 ...

  8. RDD(六)——分区器

    RDD的分区器 Spark目前支持Hash分区和Range分区,用户也可以自定义分区,Hash分区为当前的默认分区,Spark中分区器直接决定了RDD中分区的个数.RDD中每条数据经过Shuffle过 ...

  9. 重要 | Spark分区并行度决定机制

    最近经常有小伙伴在本公众号留言,核心问题都比较类似,就是虽然接触Spark有一段时间了,但是搞不明白一个问题,为什么我从HDFS上加载不同的文件时,打印的分区数不一样,并且好像spark.defaul ...

随机推荐

  1. WAMP 2.5 无法访问局域网的解决方法

    打开Apache配置文件 httpd.conf  (该文件在wamp\bin\apache\apache2.4.9\conf) DocumentRoot "d:/wamp/www/" ...

  2. Eclipse中安装配置Gradle

    Gradle是以Groovy语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动化构建工具. gradle对多工程的构建支持很出色,工程依赖是gradle的第一功能. gradle支 ...

  3. redis跨实例迁移 & redis上云

    1)redis跨实例迁移--源实例db11迁移至目标实例db30 root@fe2e836e4470:/data# redis-cli -a pwd1 -n 11 keys \* |while rea ...

  4. C# HttpWebResponse 请求常见的状态码

    Accepted 202 等效于 HTTP 状态 202. Accepted 指示已接受请求做进一步处理. AlreadyReported 208 等效于 HTTP 状态 208. AlreadyRe ...

  5. CUDA 矩阵乘法终极优化指南

    作者:马骏 | 旷视 MegEngine 架构师 前言 单精度矩阵乘法(SGEMM)几乎是每一位学习 CUDA 的同学绕不开的案例,这个经典的计算密集型案例可以很好地展示 GPU 编程中常用的优化技巧 ...

  6. C++课后习题

    一.设计一个类people,有保护数据成员:age(年龄,整型),name(姓名,string),行为成员:两个构造函数(一个默认,另一个带参数):析构函数:void setValue(int m, ...

  7. Android学习记录(二)——第一次hello world及遇到的gradle安装问题

    开始一个简单的hello world项目,简单了解Android studio的使用方法 第一步,打开Android studio,点击Create New Project 第二步,选择需要的模板 T ...

  8. 自己实现一个Controller——精简型

    写在最前 controller-manager作为K8S master的其中一个组件,负责众多controller的启动和终止,这些controller负责监控着k8s中各种资源,执行调谐,使他们的实 ...

  9. Dockers(29)- 网络连通

    网络连通 背景 基于docker0建了两个容器tomcat01和tomcat02,网段位于172.12.0.0/16 我们又新建了一个网络,网段为192.168.0.0/16,基于此网段新建了两个容器 ...

  10. genymotion启动模拟器后,sdk查询adb devices为空-解决方案

    我们在genymotion中安装了一个安卓模拟器,比如Google Nexus 4,启动该模拟器后,在cmd中输入adb devices,发现为空. 解决方案:在genymotion选择Setting ...