Transform:
1.
map:rdd中的每项数据进行map里的操作后,会形成一个个新的元素的新rdd
flatMap:在map的基础上进行扁平化,形成一个新的rdd
2.
distinct:转换操作,去重
filter:对rdd中的元素进行过滤
filterByRange:范围过滤,作用于键值对RDD,对RDD中元素进行过滤,返回键在指定范围内的元素
3.
union:并集操作,不去重
intersection:交集操作,去重
subtract:类似intersection,返回在rdd中出现并且不在otherRdd中出现的元素
subtractByKey:与subtract类似,只不过这里是针对key的,返回在主RDD中出现并且不在otherRDD中出现的元素
4.
join:相当于sql中的内联,只返回两个RDD根据key关联上的结果
leftOuterJoin:相当于sql中的左外关联,返回结果以前面的RDD为主,关联不上的记录为空
rightOuterJoin:相当于sql中的右外关联,返回结果以后面的RDD为主,关联不上的记录为空
cartesian:做笛卡尔积
5.
cogroup:将输入的数据集(k,v)和另外的数据集(k,w)进行cogroup,得到的数据集是(k,Seq(v),Seq(w))的数据集
groupBy:接收一个函数,这个函数的返回值作为key,然后通过key对里面的元素进行分组
groupByKey:会对每一个RDD中的value聚合成一个序列,此操作发生在reduce端,所以势必所有的数据
将会通过网络传输,造成不必要的浪费,同时如果数据量十分大,可能还会造成OutOfMemoryError
6.
reduceByKey:会在结果发送至reduce之前,会对每个mapper在本地进行merge,有点类似于MapReduce的combiner。
这样做的好处是在map端进行一次reduce之后,数据量会大幅度减小,从而减小传输,保证reduce端能够更快的计算出结果
reduceByKeyLocally:对RDD中的每个k对应的v值根据映射函数来计算,运算结果映射到Map[k,v],而不是RDD[k,v]
7.
mapPartitions:与map函数类似,只不过映射函数的参数由RDD的每一个元素变成了RDD中每一个分区的迭代(如果在映射过程中
需要频繁创建额外的对象,使用mapPartitions要比map高效,比如将RDD中所有数据通过JDBC写入数据库,如果使用map,
可能每个元素都要创建一个connection,这样开销很大,如果使用mapPartitions,那么只需要针对每一个分区建立一个connection)
mapPartitionsWithIndex:函数作用同mapPartitions,不过提供了两个参数,第一个参数为分区的索引。
8.
zip:用于两个RDD组合成Key/Value形式的RDD,默认两个RDD的partition的数量以及元素的数量相同,否则会抛出异常
zipPartitions:将多个RDD按照partition组合成新的RDD,该函数需要组合的RDD具有相同的分区数,但对于每个分区内的元素数量没有要求(三个参数,大致三类实现)
9.
zipWithIndex:将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键值对
zipWithUniqueId:将RDD中的元素和一个唯一ID组合成键值对(该唯一ID生成算法:
每个分区中第一个元素的唯一ID值为:该分区索引号,
每个分区中第N个元素的唯一ID值为:(前一个元素的唯一ID值) + (该RDD总的分区数))
10.
randomSplit:根据weights权重,将一个RDD切分成多个RDD,权重参数是一个Double数组
11.
glom:将RDD中每一个分区中类型为T的元素转换成Array[T],这样每个分区就只有一个数组元素
12.
coalesce:用于将RDD重新分区,使用HashPartitioner,第一个为重新分区的数目,第二个为是否进行shuffle,默认是false
repartition:该函数是coalesce函数的第二个参数为true的实现
13.
combineByKey:用于将RDD[K,V]转换成RDD[K,C],V和C的类型可相同可不同
第一个参数x:原封不动的取出来,第二个参数是函数:局部运算,第三个参数是函数:对局部运算后的结果在做运算
每个分区中每个key的value中的第一个值:(hello,1)(hello,1)(good,1)-->(hello(1,1),good(1))-->x就相当于hello的第一个1, good中的1
参数(createCombiner:组合器函数,用于将V类型转换成C类型,输入参数为RDD[K,V]中的V,输出为C
  mergeValue:合并值函数,将一个C类型和一个V类型值合并成一个C类型,输入参数为(C,V),输出为C
  mergeCombiners:合并组合器函数,用于将两个C类型值合并成一个C类型,输入参数为(C,C),输出为C
  numPartitions:结果RDD分区数,默认保持原有的分区数
  partitioner:分区函数,默认为HashPartitioner
  mapSideCombine:是否需要在Map端进行combine操作,类似于MapReduce中的combine,默认为true)
foldByKey:该函数用于RDD[K,V]根据K将V做折叠、合并处理,其中的参数zeroValue表示先根据映射函数将zeroValue应用于V,
进行初始化V,再将映射函数应用于初始化后的V.
aggregateByKey:aggregate针对于序列操作,aggregateByKey针对于K,V操作,可以先进行局部操作,在进行全局操作
从源码可看出,aggregateByKey调用的就是combinByKey方法
14.
partitionBy:根据partitioner函数生成新的ShuffleRDD,将原RDD重新分区
15.
mapValues:同map,只不过mapValues针对的是[K,V]中的V进行map操作
flatMapValues:同flatMap,只不过flatMapValues是针对[K,V]中的V值进行flatMap操作,根据V去扁平化
16.
foreachRDD:sparkStreaming中的转换算子,处理每一个时间段内的RDD数据。
17.
persist:将一个RDD进行缓存,这样以后就不需要再重新计算,大大节省了程序运行时间,可以设置缓存级别
cache:调用了persist,且只有一个MEMORY_ONLY缓存级别
18.
sample:抽样,返回RDD的抽样子集,false元素不可以多次抽样,true可以多次
(元素不可以多次抽样:withReplacement=false,每个元素被抽取到的概率为0.5:fraction=0.5
 元素可以多次抽样:withReplacement=true,每个元素被抽取到的期望次数为2:fraction=2)
takeSample:返回一个Array[T],该方法仅在预期结果数组很小的情况下使用,因为所有数据都被加载到driver的内存中。
(当不可以多次抽样:withReplacement=false;样本个数num大于父本个数时,只能返回父本个数
 当不可以多次抽样:withReplacement=false;样本个数num小于父本个数时,返回样本个数
 当可以多次抽样:withReplacement=true;样本个数num大于父本个数时,返回样本个数
 当不可以多次抽样:withReplacement=true;样本个数num小于父本个数时,返回样本个数)

Action:
1.
sortBy:排序,有shuffle,默认是true升序,可以按照k或者v进行排序
sortByKey:排序,有shuffle,默认是true升序,按照k进行排序
2.
aggregate:用户聚合RDD中的元素,先使用seqOp将RDD中每个分区的T类型元素聚合成U类型,再使用combOp
将之前每个分区聚合后的U类型聚合成U类型,特别注意seqOp和combOp都会使用zeroValue的值,zeroValue的类型为U
fold:是aggregate的简化,将aggregate中的seqOp和combOp使用同一个函数Op
3.
lookup:用于(K,V)类型的RDD,指定K值,返回RDD中该K对应的所有V值
4.
collectAsMap:List集合转成Map集合(List(("a", 1), ("b", 2))=>Map(b -> 2, a -> 1))
5.
countByKey:计算key的数量
countByValue:计算value的数量
6.
froeach:foreach也是对每个partition中的iterator时行迭代处理,通过用户传入的function(即函数f)对iterator进行内容的处理,
而不同的是,函数f中的参数传入的不再是一个迭代器,而是每次的foreach得到的一个rdd的kv实例,也就是具体的数据
foreachPartition:是对每个partition中的iterator时行迭代的处理.通过用户传入的function(即函数f)对iterator进行内容的处理,
源码中函数f传入的参数是一个迭代器,也就是说在foreachPartiton中函数处理的是分区迭代器,而非具体的数据,不会生成一个新的RDD
7.
keys:RDD[K,V],打印key
values:RDD[K,V],打印value
8.
keyBy:以传入的参数作为key(以单词的第一个字母:rdd19.keyBy(_ (0)).collect() =>  ArrayBuffer((d,dog), (s,salmon))
9.
count:返回RDD中的元素数量。
reduce:根据映射函数f,对RDD中的元素进行二元计算,返回计算结果。
collect:用于将一个RDD转换成数组。
10.
first:返回RDD中的第一个元素,不排序。
take:用于获取RDD中从0到num-1下标的元素,不排序。
top:用于从RDD中,按照默认(降序)或者指定的排序规则,返回前num个元素。
takeOrdered:和top类似,只不过以和top相反的顺序返回元素。
11.
saveAsTextFile:用于将RDD以文本文件的格式存储到文件系统中,只会保存在Executor所在机器的本地目录。
saveAsSequenceFile:用于将RDD以SequenceFile的文件格式保存到HDFS上.
saveAsObjectFile:用于将RDD中的元素序列化成对象,存储到文件中。对于HDFS,默认采用SequenceFile保存。
12.
saveAsHadoopFile:将RDD存储在HDFS上的文件中,支持老版本Hadoop API,可以指定outputKeyClass、outputValueClass以及压缩格式。
saveAsHadoopDataset:用于将RDD保存到除了HDFS的其他存储中,比如HBase。
(在JobConf中,通常需要关注或者设置五个参数:文件的保存路径、key值的class类型、value值的class类型、RDD的输出格式(OutputFormat)、以及压缩相关的参数。)
13.
saveAsNewAPIHadoopFile:用于将RDD数据保存到HDFS上,使用新版本Hadoop API。
saveAsNewAPIHadoopDataset:采用新版本Hadoop API。