Spark RDD常用算子整理

Spark RDD

                                                                                                                                                                                     yore

算子

类型

说明

++

 

合并两个RDD

aggregate

执行算子

根据初始化值进行对rdd种的元素进行聚合,结束之后每个分区会有一个结果,后面会根据这个分区结果再进行一次聚合

aggregateByKey

执行算子

和aggregate类似,但是操作的是RDD是Pair类型

cache()

控制操作

当第一次遇到Action算子时才会触发持久化操作。

Cache()是persis的一种特殊情况,将RDD持久化到内存中

转换算子

Cartesian

转换算子

计算两个RDD之间的笛卡尔乘积,并将它们作为新的RDD返回

coalesce

转换算子

将RDD进行重分区,使用HashPartitioner。

它的简版是repartition算子

Cogroup

转换算子

相当于SQL中的全外关联full outer join,返回左右RDD中的记录,关联不上的为空。

Collect

执行算子

一个RDD转换成数组。根据一个偏函数返回一个符合偏函数的结果集RDD。

即将RDD转换成数组

collectAsMap

 

一个RDD转换成Map

combineByKey

转换算子

将RDD[K,V]转换成RDD[K,C],这里的V类型和C类型可以相同也可以不同。(单个值类型v操作 , 同分区内合并操作 , 多分区间的合并操作 )

Count

执行算子

返回RDD中的元素数量

countByKey

执行算子

统计RDD[K,V]中每个K的数量。

createCombiner

参数

组合器函数,用于将V类型转换成C类型,输入参数未RDD[K,V]中的V,输出为C

distinct

转换算子

去除RDD重复的元素,返回所有元素不重复的RDD

flatMap

转换算子

类似于map。1对多,可以理解成将原来的数据集拍扁了。RDD中每个元素可生成一个或多个元素构成的新RDD

例如将数组、列表拆分成单个值或字符串拆分成单个字符

flatMapValues

转换算子

类似于flatMap,只不过flatMapValues是针对[K,V]中的V值进行flatMap操作。

filter

转换算子

过滤,根据里面的规则返回(true的)一个过滤过后的rdd

First

执行算子

返回RDD中的第一个元素,不排序。

Fold

执行算子

是aggregate的简化版,将aggregate中的seqOp和combOp使用同一个函数op。

foldByKey

转换算子

作用于RDD[K,V],根据K将V做折叠、合并处理。

foreach

执行算子

遍历RDD,将函数f应用于每一个元素。

需要注意如果RDD执行foreach,只会在Executor端有效,并且不是Driver端

foreachPartition

执行算子

与foreach类似,只不过是对每一个分区使用f

fullOuterJoin

转换算子

类似于SQL的全连接,

glom

转换算子

将RDD中每一个分区中所有类型为T的元素转换成Array[T]

groupBy

 

根据业务需求,按照自定义的返回值来分区

groupByKey

转换算子

根据key将value进行分组。该函数用于将RDD[K,V]中每个K对应的V值,合并到一个集合Iterable[V]中

intersection

转换算子

取交集。返回两个RDD中相同的数据集合,返回元素去重。类似于SQL中的inner join

join

转换算子

类似于SQL中的内关联join,只返回两个RDD根据K可以关联上的结果

leftOuterJoin

转换算子

类似于SQL中的左外关联left outer join,返回结果以前面的RDD为主,关联不上的记录为空

Lookup

执行算子

用于(K,V)类型的RDD,指定K值,

返回RDD中该K对应的所有V值。

map

转换算子

对RDD中的每一个元素经过func函数转换后形成一个新的RDD

mapPartitions

转换算子

是map的一个变种。mapPartitions的输入函数是应用于每个分区,也就是把每个分区中的内容作为整体来处理的。

在映射过程中频繁创建额外的对象时mapPartitions比map高效,例如在RDD中创建数据库的连接等。

mapPartitionsWithIndex

转换算子

函数作用同mapPartitions,不过提供了两个参数,第一个参数为分区的索引。

mapValues

转换算子

类似于map算子,只不过此算子针对[K,V]值中的V值进行map。

进行输入函数应用于RDD中Kev-Value的Value,原RDD中的Key保持不变与新的Value一起组成新的RDD中的元素。如(panda,0)转成(panda,(0,1))

mergeValue

参数

合并值函数,将一个C类型和V类型值合并成一个C类型,输入参数为(C,V),输出为C

mergeCombiners

参数

合并组合器函数,用于将两个C类型值合并成一个C类型,输入参数为(C,C),输出为C

numPartition

参数

结果RDD分区数,默认保持原有分区数

partitionBy

转换算子

该函数根据partitioner函数生成新的ShuffleRDD,将原RDD重新分区。

persist()

控制操作

persis(level:StorageLevel)可以传入缓存级别,默认是MEMORY_ONLY,此时同cache()操作

转换算子

randomSplit

转换算子

该函数根据weights权重,将一个RDD切分成多个RDD。

Reduce

执行算子

将RDD中元素两两传递给输入函数,同时产生一个新的值。

根据映射函数,对RDD中的元素进行二元计算

reduceByKey

转换算子

对元素为RDD[K,V]对的RDD中Key相同的元素的Value进行reduce

reduceByKeyLocally

转换算子

和reduceByKey类似。

RDD[K,V]中每个K对应的V值根据映射函数来运算,运算结果映射到一个Map[K,V]中,而不是RDD[K,V]。

repartition

转换算子

该函数其实就是coalesce函数第二个参数为true的实现

rightOuterJoin

转换算子

类似于SQL中的右外关联right outer join,返回结果以参数中的RDD为主,关联不上的记录为空

saveAsHadoopFile

存储操作

将RDD存储在HDFS上的文件中,支持老版本Hadoop API。

可以指定outputKeyClass、outputValueClass以及压缩格式

执行算子

saveAsHadoopDataset

存储操作

可以用于将RDD保存到除了HDFS的其他存储中,比如HBase。

在JobConf中通常需要关注或设置5个参数:文件保存路径、Key值的class类型、value值的class类型、RDD的输出格式(OutputFormat)以及压缩相关的参数

执行算子

saveAsNewAPIHadoopFile

存储操作

用于将RDD数据保存到HDFS上,使用新版本的Hadoop API,用法基本同saveAsHadoopFile

执行算子

saveAsNewAPIHadoopDataset

存储操作

该方法作用同saveAsHadoopDataset,

只不过采用新版本的Hadoop API

执行算子

saveAsObjectFile

存储操作

将RDD中的元素序列化成对象,存储到文件中。

对于HDFS,默认采用SequenceFile保存

执行算子

saveAsSequenceFile

存储操作

将RDD以SequenceFile的文件格式保存到HDFS上。

执行算子

saveAsTextFile

存储操作

将RDD以文本文件的格式存储到文件系统中。

执行算子

sortBy

执行算子

排序。根据规则来定义排序。true升序    false,升序

sortByKey

执行算子

排序。根据按value的排序

subtract

转换算子

该函数类似于intersection,但返回在RDD中出现,并且不在otherRDD中出现的元素,不去重。

subtractByKey

转换算子

和基本转换操作中的subtract类似。只不过这里是针对K的,返回在主RDD中出现,并且不在otherRDD中出现的元素。

take(n)

执行算子

用于获取RDD中从0到n-1下标的元素,不排序。

takeOrdered

执行算子

和top类似,只不过以和top相反的顺序返回元素

top

执行算子

从RDD中,按照默认(降序)或者指定的排序规则,返回前num个元素

union

转换算子

就是将两个RDD进行合并(类型需一致),返回两个RDD的并集,不去重。

zip

转换算子

将两个RDD组合成Key/Value形式的RDD。这里默认两个RDD的partitio数以及元素数量都相同,否则会抛出异常

zipPartitions

转换算子

将多个RDD按照partition组合成为新的RDD,该操作需要组合的RDD具有相同的分区数,但对于每个分区内的元素数量没有要求

zipWithIndex

转换算子

将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对。

zipWithUniqueId

转换算子

将RDD中元素和一个唯一ID组合成键/值对。该唯一ID生成的算法如下:①每个分区中第一个元素的唯一ID值为该分区索引号;②每个分区中第N个元素的唯一ID值为(前一个元素唯一ID-ID值)+(该RDD总的分区数)

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/github_39577257/article/details/80686876