Spark RDD 常用算子总结

Transformation:转换算子

1、Map map 的输入变换函数应用于 RDD 中所有元素,而 mapPartition 应用于所有分区。区别于 mapPartitions 应用于所有分区。区别于 mapPartions 主要在于调用粒度不同。如 parallelize(1 to 10, 3),map 函 数执行 10 次,而mapPartitions 函数执行 3 次。

2、Filter(function)
过滤操作,满足 filter 内函数为 true 的 RDD 内所有元素组成一个新的数据集。

3、flatMap(function)
map 是对 RDD 中元素逐一进行函数操作映射为另外一个 RDD,而 flatMap 操作是将函数应用于 RDD 之 中的每一个元素,将返回的迭代器的所有内容构成新的 RDD。将返回的迭代器的所有内容构成 RDD。 FlatMap 与 map 区别在于 map 为“映射”,而 flatmap“先映射、后扁平化”,map 对每一次(函数) 都产生一个元素,返回一个对象,而 flatmap 多一步就是所有对象合并为一个对象

4、mapPartition(function)
区别于 foreachPartition(属于 Action,且无返回值),mapPartitions 可获取返回值。与 Map 的区别前面 已经提到过,由于单独运行于 RDD 的每个分区上(block)所以在一个类型为 T 的 RDD 上运行时,function 必须是 Iterator => Iterator类型的方法(入参)。

5、mapPartitionsWithIndex(function) 与 mapPartitions 类似,但需要提供一个表示分区索引值的整型值作为参数,因此 function 必须是(int, Iterator)=>Iterator类型的。

6、sample (withReplacement, fraction, seed)
采样操作,用于从样本中取出部分数据。withReplacement 是否放回,fraction 采样比例,seed 用于指定的 随机数生成器的种子。(是否放回抽样分 true 和 false,fraction 取样比例为(0, 1]。seed 种子为整型实 数。)

7、union (otherDataset) 对于源数据集和其他数据集并集,不去重。

8、Intersection (otherDataset) 对于源数据和其他数据集求并集,并去重,且无序返回。

9、distinct ([numTask])
返回一个在源数据集去重之后的新数据集,即去重,并局部无序而整体有序返回。

10、groupBykey([numTask])
在一个 PairRDD 或(k,v)RDD 上调用,返回一个(k,Iterable)。主要作用是将相同的所有的键值 对分组到一个集合序列当中,其顺序是不确定的。groupByKey 是把所有的键值对集合都加载到内存中存 储计算,若一个键对应值太多,则易导致内存溢出。

11、reduceBykey([numTask])
与 groupByKey 类似,却有不同。如(a,1), (a,2), (b,1), (b,2)。groupByKey 产生中间结果为( (a,1), (a,2) ), ( (b,1), (b,2) )。而 reduceByKey 为(a,3), (b,3)。 reduceByKey 主要作用是聚合,groupByKey 主要作用是分组。(function 对于 key 值来进行聚合)

12、aggregateBykey(zeroValue)(seqOp, combOp, [numTasks])
类似 reduceBykey,与对 pairRDD 中想用的 key 值进行聚合操作,使用初始值(seqOp 中使用,而 combOpenCL 中未使用)对应返回值为 pairRDD,而区于 aggregate(返回值为非 RDD)

13、sortByKey([ascending], [numTasks])
同样是基于 pairRDD 的,根据 key 值进行排序。ascending 升序,默认为 true,即升序;numTasks

14、 join (otherDataSet,[numTasks])
加入一个 RDD,在一个(k,v)和(k,w)类型的 DataSet 上调用,返回一个(k,(v,w))的 pair dataset

15、cogroup (otherDataSet,[numTasks])
合并两个 RDD,生成一个新的 RDD。实例中包含两个 Iterable 值,第一个表示 RDD1 中相同值,第二个 表示 RDD2 中相同值(key 值),这个操作需要通过 partitioner 进行重新分区,因此需要执行一次 shuffle 操作。(若两个 RDD 在此之前进行过 shuffle,则不需要)

16、cartesian(otherDataSet)
求笛卡尔积。该操作不会执行 shuffle 操作。

17、Pipe (command,[envVars])
通过一个 shell 命令来对 RDD 各分区进行“管道化”。通过 Pipe 变化将一些 shell 命令用于 Spark 中生 成新的 RDD。

18、coalesce (numPartitions)
重新分区,减少 RDD 中分区的数量到 numPartitions。

19、repartition (numPartitions)
repartition 是 coalesce 接口中 shuffle 为 true 的简易实现,即 Reshuffle RDD 并随机分区,使各分区数 据量尽可能平衡。若分区之后分区数远大于原分区数,则需要 shuffle。

20、repartitionAndSortWithinPartitions(partitioner)
该方法根据 partitioner 对 RDD 进行分区,并且在每个结果分区中按 key 进行排序。

 
 
Action: (活动算子)
1、 reduce (function) Reduce 将 RDD 中元素两两传递给输入函数,同时产生一个新值,新值与 RDD 中下一个元素在被传递给 输入函数,直到最后一个值为止。

2、 collect () 将一个 RDD 以一个 Array 数组形式返回其中所有的元素。

3、 count() 返回数据集中元素个数,默认 Long 类型。

4、 First() 返回数据集成第一个元素,(类似于 take(1))

5、takeSample(withReplacement, num, [seed]) 对于一个数据集进行随机抽样,返回一个包含 num 个随机抽样元素数组,withReplacement 表示是否有放 回抽样,参数 seed 指定生成随机数的种子。该方法仅在预期结果数组很小的情况下使用,因为所有数据 都被加载到 driver 端的内存中。

6、 take(n) 返回一个包含数据集前 n 个元素的数组,(从 0 下标到 n-1 下标的元素),不排序。

7、takeOrdered (n,[Ordered]) 返回 RDD 前 n 个元素,并按默认顺序排序(升序)或者按自定义比较器顺序排序。

8、saveAStextfile(path) 将 dataSet 中元素以文本文件的形式写入本地文件系统或者 HDFS 等。Spark 将对每个元素调用 toString方法,将数据元素转换为文本文件中的一行记录。 若将文件保存到本地文件系统,那么只会保存在 executor 所在机器的本地目录。

9、saveAsSequenceFile(path)(Java and Scala) 将 dataSet 中元素以 Hadoop SequenceFile 的形式写入本地文件系统或者 HDFS 等。(对 pairRDD 操 作)

10、saveAsObjectFile(path)(Java and Scala) 将数据集中元素以 ObjectFile 形式写入本地文件系统或者 HDFS 等。

11、 countByKey() 用于统计 RDD[K,V]中每个 K 的数量,返回具有每个 key 的计数的(k,int)pairs 的 hashMap。

12、 foreach(function) 对数据集中每一个元素运行函数(function)。

 
补充:Spark2.3 及之后的官方文档中将原[numTasks]任务数参数改为了[numPartitions]分区数。

 
转载:注明出处,尊重原创。

原创文章 48 获赞 45 访问量 9353

猜你喜欢

转载自blog.csdn.net/weixin_46163590/article/details/105871215