RDD 的分区和 Shuflee_通过其他算子指定分区数 | 学习笔记

简介: 快速学习 RDD 的分区和 Shuflee_通过其他算子指定分区数

开发者学堂课程【大数据Spark2020最新课程(知识精讲与实战演练)第二阶段RDD 的分区和 Shuflee_通过其他算子指定分区数学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/11994


RDD 的分区和 Shuflee_通过其他算子指定分区数


内容介绍

一、很多算子都可以指定分区数

二、Partitioner 分区函数


Rdd 五大属性中就有一个是分区函数,指的就是 patitioner patitioner 的作用是指定一个 ky 有型数据的分区,在 shuffle 的时候非常有用,patitioner 只有在 ky 有型数据的 rdd 中才有。


一、很多算子都可以指定分区数

在代码当中有一个 reduceByKey 这样的函数,点进去往上滚动,

发现其实是有一个重载的方法,这个方法允许传入一个 numPartitions ,它的意义是指定为指定新生成 rdd 的分区数。

image.png

所看到的基本上涉及分组聚合这些算子,shuffle 的算子大部分都允许重新指定分区数。第二点,一般一个算子可以通过重载在第二个或后一个参数的位置允许传入分区数,从而使新生成的 rdd 改变分区数。如果没有改变分区数就会记成自老 rdd 的分区数。

一般情况下设计 shuffle 操作的算子都允许重新指定分区数;指定分区数的方式在最后一个参数的位置传入新的分区数;如果没有重新指定分区数,默认从父 RDD 中继承分区数。

 

二、Partitioner 分区函数

进入代码当中搜索 reduceByKey ,这个 reduceByKey 函数当中有一个重载,允许指定分区数。

image.png

这个 partitioner 函数有两个分区,如果要 shuffle 三个分区里,这两个分区里就有很多数据,假设有三条数据,确定每条数据分发到哪里是由 partitioner 函数确定的,在 mypriduce 函数中也有这样的分区函数。

spark 中分区函数特殊一些,因为只有 ky 型数据才有 shuffle 操作,所以 partitioner 也只作用于 ky 型的 RDD 上。在 spark 中函数默认的分区函数是 HashPartitionerHashPartitioner 要先求得 k hashcode ,按照 hashcode 到对应的 reducer 数量取一个模,模到谁就是谁。

首先 key.toHashCode 本质上是一个数字, key.toHashCode 模上一个 reucer count 这个模的结果,取值范围是在 0-reducer count 之间,大于  reducer count ,这个时候就可以把对应的 key 的数据加到对应的 reducer 当中。

点进 HashPartitioner 可以看到这个HashPartitioner。 其实是继承了 Partitioner 一个,再点进 Partitioner 的一个特质,这个抽象类当中有两个方法是需要复习的,第一个叫 numPartitions 即指定有多少分区;还有一个叫做getPartition 有了 key 才能分区。

本节讲解两个内容,第一个内容告诉大家有很多算子都有指定分区数的功能;第二个是通过 partitioner 去设置分区函数,这个分区函数跟 myreduce 中的分区函数作用是一模一样的。

相关文章
|
5月前
spark3总结——分区数对带有初始值聚合操作的影响
spark3总结——分区数对带有初始值聚合操作的影响
33 4
|
存储 分布式计算 并行计算
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
|
6月前
|
分布式计算 监控 大数据
Spark RDD分区和数据分布:优化大数据处理
Spark RDD分区和数据分布:优化大数据处理
|
分布式计算 负载均衡 算法
Flink---5、聚合算子、用户自定义函数、物理分区算子、分流、合流
Flink---5、聚合算子、用户自定义函数、物理分区算子、分流、合流
|
存储 缓存 分布式计算
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
150 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
|
存储 分布式计算 对象存储
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
|
分布式计算 并行计算 Spark
|
分布式计算 大数据 Scala
RDD 的分区和 Shuflee_通过算子重分区 | 学习笔记
快速学习 RDD 的分区和 Shuflee_通过算子重分区
RDD 的分区和 Shuflee_通过算子重分区 | 学习笔记
|
分布式计算 大数据 Shell
RDD 的分区和 shuffle 创建 RDD 时指定分区数 | 学习笔记
快速学习 RDD 的分区和 shuffle 创建 RDD 时指定分区数
101 0
RDD 的分区和 shuffle 创建 RDD 时指定分区数 | 学习笔记
|
分布式计算 大数据 Spark
RDD 算子_转换_重分区 | 学习笔记
快速学习 RDD 算子_转换_重分区
RDD 算子_转换_重分区 | 学习笔记