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)
相关文章
|
2月前
|
存储 分布式计算 并行计算
【赵渝强老师】Spark中的RDD
RDD(弹性分布式数据集)是Spark的核心数据模型,支持分布式并行计算。RDD由分区组成,每个分区由Spark Worker节点处理,具备自动容错、位置感知调度和缓存机制等特性。通过创建RDD,可以指定分区数量,并实现计算函数、依赖关系、分区器和优先位置列表等功能。视频讲解和示例代码进一步详细介绍了RDD的组成和特性。
|
3月前
|
存储 缓存 分布式计算
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
57 4
|
3月前
|
分布式计算 Java 大数据
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
52 0
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
|
3月前
|
消息中间件 分布式计算 Kafka
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
45 0
|
3月前
|
SQL 分布式计算 大数据
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
105 0
|
3月前
|
SQL 分布式计算 大数据
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
58 0
|
3月前
|
缓存 分布式计算 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
75 0
|
3月前
|
分布式计算 算法 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
72 0
|
27天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
171 85
|
2天前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应