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 中的分区函数作用是一模一样的。

相关文章
|
数据可视化 数据挖掘 Java
提升代码质量与效率的利器——SonarQube静态代码分析工具从数据到洞察:探索Python数据分析与科学计算库
在现代软件开发中,保证代码质量是至关重要的。本文将介绍SonarQube静态代码分析工具的概念及其实践应用。通过使用SonarQube,开发团队可以及时发现和修复代码中的问题,提高代码质量,从而加速开发过程并减少后期维护成本。 在当今信息爆炸的时代,数据分析和科学计算成为了决策和创新的核心。本文将介绍Python中强大的数据分析与科学计算库,包括NumPy、Pandas和Matplotlib,帮助读者快速掌握这些工具的基本用法和应用场景。无论是数据处理、可视化还是统计分析,Python提供了丰富的功能和灵活性,使得数据分析变得更加简便高效。
|
消息中间件 机器学习/深度学习 存储
字节跳动大数据开发面试题-附答案 (一)
此面试题来自牛客网友分享的字节跳动应届一面,面试时长一小时。 网友情况:985 本硕。
2221 0
字节跳动大数据开发面试题-附答案 (一)
|
自然语言处理 索引
ES 匹配多个搜索条件和精确查询
ES 匹配多个搜索条件和精确查询
|
Python
Python小技巧:一种字符串的排序方式
该文介绍了如何对包含数字的字符串列表进行特定排序。首先,示例了一个初始问题,使用Python内置的`sorted()`函数未能达到预期(按数字部分升序排序)。然后,文章提出通过自定义排序键`sort_key`来解决,利用正则表达式提取字符串尾部数字并进行排序。进一步,文章扩展到处理如'nxxx_name_nxxx'格式的字符串,通过给前缀和后缀数字赋予不同权重进行复合排序,展示了如何实现先按前缀、再按后缀排序的功能。提供的代码示例成功地完成了任务。
244 0
|
分布式计算 Serverless 数据处理
|
存储 SQL 分布式数据库
深入解析HBase与关系数据库的关键差异
【8月更文挑战第31天】
454 1
|
负载均衡 算法
软件体系结构 - 负载均衡算法
软件体系结构 - 负载均衡算法
207 4
|
Android开发
android.app.BackgroundServiceStartNotAllowedException
android.app.BackgroundServiceStartNotAllowedException
560 3
|
存储 分布式计算 并行计算
阿里云大数据开发二面面经,已过,面试题已配答案
阿里云大数据开发一面面经,已过,面试题已配答案
|
测试技术 Python
多种方法实现Appium屏幕滑动:让用户仿真动作更简单
本文介绍了Appium在移动端自动化测试中如何模拟用户滑动操作。滑动常见于触摸事件模拟,坐标计算和惯性滑动场景。Appium提供了`swipe`和`scroll`两种方法:`swipe`需要指定起始和结束坐标及可选的持续时间;`scroll`则直接使用起始和结束元素进行滑动。文中给出了Python示例代码,展示了如何在不同场景下执行滑动操作。