原文:https://cloud.tencent.com/developer/article/1085207
目录
一、分类
1、Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Value型的数据。
2、Key-Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Key-Value型的数据。
3、Action算子,这类算子会触发SparkContext提交作业。
二、Value型Transformation算子
1)map:map是对RDD中的每个元素都执行一个指定函数来产生一个新的RDD。任何原RDD中的元素在新RDD中都有且只有一个元素与之对应
2)flatMap:与map类似,将原RDD中的每个元素通过函数f转换为新的元素,并将这些元素放入一个集合,构成新的RDD
3)mapPartiions:mapPartitions是map的一个变种。map的输入函数应用于RDD中的每个元素,而mapPartitions的输入函数应用于每个分区,也就是把每个分区中的内容作为整体来处理的。
4)glom(形成一个Array数组):将每个分区内的元素组成一个数组,分区不变
5)union:合并同一数据类型元素,但不去重。合并后返回同类型的数据元素
6)cartesian(笛卡尔操作):对输入RDD内的所有元素计算笛卡尔积
7)groupBy(生成相应的key,相同的放在一起)
8)filter(过滤)
9)distinct(去重)
10)subtract(去掉含有重复的项)
11)sample(采样)
12)takesample
13)cache
14)persist
三、Key-Value型Transformation算子
处理数据类型为Key-Value的Transmation算子,大致可以分为三类: 1.输入输出分区1对1 2.聚集操作 3.连接
输入输出分区1对1
1)mapValues:顾名思义就是输入函数应用于RDD中KV(Key-Value)类型元素中的Value,原RDD中的Key保持不变,与新的Value一起组成新的RDD中的元素。因此,该函数只适用于元素为Key-Value对的RDD
聚集
1)combineByKey:与reduceByKey类似,相当于将元素(int, int)KV对变换为(int, Seq[int])新的KV对
2)reduceByKey:对元素为KV对的RDD中Key相同的元素的Value进行reduce操作,即两个值合并为一个值。因此,Key相同的多个元素的值被合并为一个值,然后与原RDD中的Key组成一个新的KV对
3)partitionBy:根据KV对的Key对RDD进行分区
4)cogroup:一组强大的函数,可以对多达3个RDD根据key进行分组,将每个Key相同的元素分别聚集为一个集合
连接
1)join:本质是对两个含有KV对元素的RDD进行coGroup算子协同划分,再通过flatMapValues将合并的数据分散。
2)leftOutJoin:相当于在join基础上判断一侧的RDD是否为空,如果为空,则填充空,如果有数据,则将数据进行连接计算,然后返回结果。
3)rightOutJoin:相当于在join基础上判断一侧的RDD是否为空,如果为空,则填充空,如果有数据,则将数据进行连接计算,然后返回结果。
四、Actions算子
1)foreach: 是对RDD中的每个元素执行无参数的f函数,返回Unit。定义如下: def foreach(f: T => Unit)
2)saveAsTextFile:函数将RDD保存为文本至HDFS指定目录,每次输出一行。
3)saveAsObjectFile:将RDD分区中每10个元素保存为一个数组并将其序列化,映射为(null, BytesWritable(Y))的元素,以SequenceFile的格式写入HDFS
4)collect:将RDD分散存储的元素转换为单机上的Scala数组并返回,类似于toArray功能
5)collectAsMap:与collect类似,将元素类型为key-value对的RDD,转换为Scala Map并返回,保存元素的KV结构。
6)reduceByKeyLocally:先reduce,然后collectAsMap。
7)lookup:扫描RDD的所有元素,选择与参数匹配的Key,并将其Value以Scala sequence的形式返回
8)count:返回RDD中的元素个数。
9)top:返回RDD中最大/最小的K个元素。
10)reduce:对RDD中的所有元素进行reduceLeft操作。
11)fold:与reduce类似,不同的是每次对分区内的value聚集时,分区内初始化的值为zero value。
12)aggregate:允许用户对RDD使用两个不同的reduce函数,第一个reduce函数对各个分区内的数据聚集,每个分区得到一个结果。第二个reduce函数对每个分区的结果进行聚集,最终得到一个总的结果。aggregate相当于对RDD内的元素数据归并聚集,且这种聚集是可以并行的。而fold与reduced的聚集是串行的。