目录
一:RDD创建
1.1从文件系统中加载数据创建RDD
采用textFile()方法,该方法把文件的url作为参数。这个url可以是:
- 本地文件系统的地址
- 分布式文件系统HDFS的地址
1.2通过并行集合(数组)创建RDD
通过调用SparkContext的parallelize方法,在Driver中一个已经存在的集合(数组)上创建。
二:RDD操作
2.1转换操作
- 对于RDD而言,每一次转换操作都会产生不同的RDD,供给下一个“转换”使用
- 转换得到的RDD是惰性求值的,也就是说,整个转换过程只是记录了转换的轨迹,并不会发生真正的计算,只有遇到行动操作的时候,才会发生真正的计算,开始从血缘关系源头开始,进行物理的转换操作。
- 常用的转换操作:

- map()和flatMap()区别
- groupByKey()和reduceByKey()的区别
2.2行动操作
- 动作操作彩色真正触发计算的地方。Spark程序执行到行动操作时候,才会执行真正的计算,从文件中加载数据,完成一次又一次的转换操作,最终完成动作操作得到结果。
- 常见的动作操作

2.3 惰性机制
所谓的“惰性机制”是指,整个转换过程只是记录了转换的轨迹,并不会发生真 正的计算,只有遇到行动操作时,才会触发“从头到尾”的真正的计算。
2.4 持久化
- 在Spark中,RDD采用惰性求值的机制,每次遇到行动操作,都会从头开始执行计算。每次调用行动操作,都会触发一次从头开始的计算。这对于迭代计算而言,代价很大,迭代计算经常需要多次重复使用同一组数据。
- 可以通过持久化(缓存)机制避免这种重复开销
- 可以使用persist()方法对一个RDD标记为持久化(并不会立即进行持久化,而是等到遇到第一个行动操作触发真正计算以后,才会把计算结果进行持久化)。
- 持久化的RDD将会被保留在计算节点的内存中被后面的行动操作重复使用。
三:rdd转换算子
3.1 value类型
- map
将处理的数据进行映射转换,这里的转换可以是类型的转换,也可以是值的转换。
- mappartitions
将待处理的数据以分区为单位发送到计算节点进行处理,这里的处理是指可以进行任意的处理。
- flatMap
将处理的数据进行扁平化后再进行映射处理,所以算子也称扁平映射。
- glom
将同一个分区的数据直接转换为相同类型的内存数组进行处理,分区不变。
- groupBy
将数据根据指定的规则进行分组,分区默认不变,但是数据会被打乱重新组合,我们将这样的操作成为shuffle。
- filter
将数据根据指定规则进行筛选过滤,符合规则的数据保留,不符合规则的数据丢弃。当数据进行筛选过滤后,分区不变,但是分区内的数据可能不均衡,生产环境下,可能出现数据倾斜。
- sample
根据指定的规则从数据中抽取数据。
- distinct
将数据中重复的数据去重
- coalesce
根据数据量缩减分区,用于大数据集过滤后,提高小数据集的执行效率
- repartition
增加或者缩减分区。
- sortBy
数据排序
- intersection
对源rdd和参数rdd求交集后返回一个新的rdd
- union
对源rdd和参数rdd求并集后返回一个新的rdd
- subtract
rdd求差集
- zip
将两个rdd中的元素,以键值对的形式进行合并。
3.2 key-value类型
- partitionBy
将数据按照指定partition重新进行分区。
- reduceByKey
可以将数据按照相同的key对value进行聚合。
- groupbykey
将数据根据keyv对value进行分组
补充:reducebykey和groupbykey区别?
1)从shuffle角度,reducebykey和reducebykey都存在shuffle操作,但是reducebykey可以在shuffle前对分区内内相同的key的数据进行预聚合(combine)功能,这样会减少落盘的数据量,而groupbykey只是进行分组,不存在数据量减少的问题,reducebykey性能较高。
2)从功能角度,reducebykey包含分区和聚合的功能,如果仅仅是分组而不需要聚合,那么还是使用groupbykey.
- aggregateByKey
将数据根据不同的规则进行分区内计算和分区间计算。当分区内计算规则相同时候,就可以简化为foldbykey
- sortbykey
按照key进行排序。
- join
在类型为(k,v)和(k,w)的rdd上调用,返回一个相同的key对应的所有元素连接在一起的(k,(v,w))的rdd。
- leftouterjoin
左外连接
- cogroup
在类型为(K,V)和(K,W)的 RDD 上调用,返回一个(K,(Iterable<V>,Iterable<W>))类型的 RDD
四:rdd行动算子
- reduce
聚合rdd中的所有元素,先聚合分区内数据,再聚合分区间数据
- collect
在驱动程序中,以数组array的形式返回数据集的所有元素。
- count
返回rdd中元素个数
- first
返回rdd中的第一个元素
- take
返回一个由rdd的前n个元素组成的数组
- takeordered
返回该rdd排序后前n个元素组成的数组。
- aggregate
分区的数据通过初始值和分区内的数据进行聚合,然后再和初始值进行分区间的数据聚合。同理,aggregate的特例是fold.
- countbykey
统计每种key的个数。
- save
将数据保存到不同格式的文件中。
- foreach
分布式遍历rd中的每一个元素。

本文详细介绍了Spark中的RDD(弹性分布式数据集)的创建,包括从文件系统和并行集合创建。接着探讨了RDD的操作,特别是转换和行动操作,以及它们的惰性机制和持久化。此外,文章深入讨论了各种转换算子,如map、flatMap、filter和reduceByKey,以及行动算子如reduce、collect和save。通过对RDD的深入理解,有助于提升Spark应用的性能和效率。
2712

被折叠的 条评论
为什么被折叠?



