Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(上)

简介: Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(上)

0x00 教程内容


  1. 转换算子与行动算子的进阶操作
  2. RDD的缓存与持久化


0x01 进阶算子操作


1. 创建RDD
val rdd = sc.parallelize(List((1,1),(2,1),(3,1),(3,4)))


2. 转换算子
【1】reduceByKey(func)

含义:合并具有相同键的值。

rdd.reduceByKey((x,y) => x+y).collect()


image.png


代码解释:具有相同键的是:(3,1),(3,4),所以合并成了(3,5)

【2】groupByKey()

含义:对具有相同键的值进行分组。

rdd.groupByKey().collect()


image.png


代码解释:具有相同键的是:(3,1),(3,4),进行了分组。CompactBuffer 不是 Scala 里定义的数据结构,而是 Spark 里的数据结构,它继承自一个迭代器和序列,其它的返回值是一个很容易进行循环遍历的集合。


【3】mapValues(func)

含义:对键值对 RDD 的每个值应用一个函数而不改变对应的键。


rdd.mapValues(x => x*3).collect()


image.png


代码解释:键不变,但是值都进行了 x => x*3 操作,相当于值为 x

【4】flatMapValues(func)

含义:对键值对 RDD 中的每个值应用一个返回迭代器的函数,然后对返回的每个元素都生成一个对应原键的键值对记录,通常用于符号化。


rdd.flatMapValues(x => (x to 4)).collect()


代码解释:键不变,对值都进行了 x => (x to 4) 操作,相当于值为 x


image.png


【5】keys()

含义:返回一个仅包含所有键的 RDD。

rdd.keys.collect()


image.png


注意:是 keys ,不是keys()

【6】values()

含义:返回一个仅包含所有值的 RDD。


rdd.values.collect()


image.png


注意:是 values ,不是values()

【7】sortByKey()

含义:返回一个根据键排序的 RDD。

rdd.sortByKey().collect()


image.png


代码解释:对于相同的键,排序顺序是不确定的。


【8】combineByKey(createCombiner, mergeValue, mergeCombiners)

含义:combineByKey() 是键值对 RDD 中较为核心的高级函数,很多其它聚合函数都是在这个之上实现的,比如:groupByKey,reduceByKey 等等。


combineByKey()在遍历分区的所有元素时,主要有两种情况:

1、该元素对应的键没有遇到过;

2、该元素对应的键和之前的某一个元素的键是相同的。


如果是新的元素,combineByKey() 会使用 第一个 参数createCombiner()函数来创建该键对应累加器的初始值。


注意:是在每一个分区中第一次出现新键的时候创建,而不是在整个 RDD 中。


在当前分区中,如果遇到该键是已经存在的键,那么就调用 第二个 参数 mergeValue()方法将该键对应累加器的当前值与这个新的值合并。


因为有多个分区,而且每个分区都是独立处理的,所以最后需要调用 第三个mergeCombiners()方法将各个分区的结果进行合并。


combineByKey的源码,看不懂没关系:


def combineByKey[C](
      createCombiner: V => C,
      mergeValue: (C, V) => C,
      mergeCombiners: (C, C) => C,
      partitioner: Partitioner,
      mapSideCombine: Boolean = true,
      serializer: Serializer = null)
相关文章
|
6月前
|
存储 缓存 分布式计算
187 RDD的缓存
187 RDD的缓存
19 0
|
16天前
|
存储 缓存 NoSQL
缓存、分布式缓存和持久化
这篇内容介绍了缓存的概念和Redis的作用,以口袋与公文包的比喻解释了缓存如何提高数据访问速度。Redis是一个内存中的高级缓存系统,能提升系统响应速度。接着讨论了为何需要分布式缓存,通过多个“篮子”(Redis节点)解决单点故障和性能瓶颈,保证高可用性和数据安全性。最后提到了Redis的两种持久化机制——RDB(定期数据快照)和AOF(记录写操作日志),分别用照片备份和实时同步来比喻,说明它们在数据丢失风险和恢复速度上的权衡。
|
2月前
|
存储 缓存 分布式计算
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
|
4月前
|
存储 缓存 分布式计算
Spark RDD持久化与缓存:提高性能的关键
Spark RDD持久化与缓存:提高性能的关键
|
4月前
|
存储 缓存 NoSQL
Redis进阶-Redis缓存优化
Redis进阶-Redis缓存优化
44 0
|
5月前
|
缓存 NoSQL 应用服务中间件
分布式缓存之Redis(持久化、主从、哨兵、分片集群)
分布式缓存之Redis(持久化、主从、哨兵、分片集群)
|
5月前
|
存储 缓存 前端开发
《Webpack5 核心原理与应用实践》学习笔记-> webpack5持久化缓存
《Webpack5 核心原理与应用实践》学习笔记-> webpack5持久化缓存
71 1
|
7月前
|
存储 缓存 NoSQL
Redis第一讲:相关的基础知识/数据类型/缓存的过期策略/双写一致性/内存存储和持久化
Redis第一讲:相关的基础知识/数据类型/缓存的过期策略/双写一致性/内存存储和持久化
|
8月前
|
存储 缓存 分布式计算
大数据Spark RDD持久化和Checkpoint
大数据Spark RDD持久化和Checkpoint
48 0
|
9月前
|
缓存 NoSQL Redis
Redis - 缓存持久化
Redis 持久化的两种方式 RDB 和 AOF ,它们的工作原理以及优缺点
57 0