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提供了丰富的功能和灵活性,使得数据分析变得更加简便高效。
|
Python
Python小技巧:一种字符串的排序方式
该文介绍了如何对包含数字的字符串列表进行特定排序。首先,示例了一个初始问题,使用Python内置的`sorted()`函数未能达到预期(按数字部分升序排序)。然后,文章提出通过自定义排序键`sort_key`来解决,利用正则表达式提取字符串尾部数字并进行排序。进一步,文章扩展到处理如'nxxx_name_nxxx'格式的字符串,通过给前缀和后缀数字赋予不同权重进行复合排序,展示了如何实现先按前缀、再按后缀排序的功能。提供的代码示例成功地完成了任务。
194 0
|
分布式计算 Serverless 数据处理
|
存储 缓存 固态存储
MPP架构数据仓库使用问题之ADB PG的性能优化点主要包括什么方面
MPP架构数据仓库使用问题之ADB PG的性能优化点主要包括什么方面
|
运维 供应链 监控
深度解读:计算巢产品面对面--为软件供需两端提供哪些服务(系列二)
软件供需两端,供应端除了软件开发者,还包含软件服务商(企业应用服务商、IT集成服务商、交付服务商和管理服务提供商),需求端为软件使用终端用户。
69916 92
|
Android开发
android.app.BackgroundServiceStartNotAllowedException
android.app.BackgroundServiceStartNotAllowedException
518 3
|
测试技术 Python
多种方法实现Appium屏幕滑动:让用户仿真动作更简单
本文介绍了Appium在移动端自动化测试中如何模拟用户滑动操作。滑动常见于触摸事件模拟,坐标计算和惯性滑动场景。Appium提供了`swipe`和`scroll`两种方法:`swipe`需要指定起始和结束坐标及可选的持续时间;`scroll`则直接使用起始和结束元素进行滑动。文中给出了Python示例代码,展示了如何在不同场景下执行滑动操作。
|
分布式计算 Java Scala
spark 与 scala 的对应版本查看、在idea中maven版本不要选择17,弄了好久,换成11就可以啦
spark 与 scala 的对应版本查看、.在idea中maven版本不要选择17,弄了好久,换成11就可以啦
763 2
|
负载均衡 算法
软件体系结构 - 负载均衡算法
软件体系结构 - 负载均衡算法
168 4
|
前端开发 容器
CSS——scroll-snap滚动捕捉的一些属性
CSS——scroll-snap滚动捕捉的一些属性
240 0