Spark中RDD的依赖分类;Spark中的RDD Transformation函数、RDD Action函数;Spark 框架的优势;Spark性能优化:RDD方法优化

RDD依赖分类

宽依赖

操作产生类似与MapReduce中shuffle的操作
– 子 RDD 的每个分区依赖于所有父 RDD 分区
– 对单个 RDD 基于 key 进行重组和 reduce ,如 groupByKey 、 reduceByKey
– 对两个 RDD 基于 key 进行 join 和重组,如 join、

窄依赖

操作不会产生类似与MapReduce中shuffle的操作
– 子 RDD 的每个分区依赖于常数个父分区(即与数据规模无关)
– 输入输出一对一的算子,且结果 RDD 的分区结构不变,主要是 map 、 flatMap
– 输入输出一对一,但结果 RDD 的分区结构发生了变化,如 union 、 coalesce
– 从输入中选择部分元素的算子,如 filter 、 distinct 、 subtract 、 sample

Spark中的RDD Transformation函数

创建的对象为懒加载
在这里插入图片描述

RDD Action函数

饿汉模式,先创建
在这里插入图片描述

Spark 框架的优势

数据结构RDD,用于存储管理数据

DAG调度

spark中每个job的调度都是DAG调度

DAG:有向无环图

(0)构建DAG图,
倒推法,配合依赖
(1)DAG图划分为多个stage,RDD直接产生了shuffle过程,就会划分stage
(2)按照顺序执行stage中task任务,每个stage中可有多个Task

Spark性能优化:RDD方法优化

对于RDD中某些函数使用注意

(1)能不使用groupByKey函数就不使用,除非不得已

可以使用reduceByKey函数
redcueByKey可以先进行本地聚合操作

(2)尽量使用XXPartition函数代替XX函数

xx函数:map/foreach/zip

def foreach(f: T => Unit): Unit
f:针对RDD中每个元素进行的操作处理的
def foreachPartition(f: Iterator[T] => Unit): Unit
f:针对RDD中每个分区的元素进行操作处理的
比如RDD中2个分区,100条数据,现将数据报道MYSQL表中

foreach
	item ->mysql
	connection ->创建100次
foreachPartition
		对每个分区中数据
		只要获取2个连接即可

(3)适当的降低或者增加RDD分区数目

RDD的分区对应一个Task处理数据
def repartition(numPartitions: Int) -产生shuffle
def coalesce(numPartitions: Int, shuffle: Boolean = false)
一开始的时候,数据量比较多,可以加到RDD分分区数,增加并行度(在集群资源充足的情况下)
当数据预处理之后(尤其过滤清洗之后)。RDD中数据量减少了很多,此时可以考虑减少分区的数目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名一小卒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值