大数据 - Spark常用算子

从大方向来说,Spark 算子大致可以分为以下三类:

Transformation

       变换/转换算子,这种变换并不触发提交作业,完成作业中间过程处理。Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算。

Action

       行动/执行算子,这类算子会触发 SparkContext 提交 Job 作业。Action 算子会触发 Spark 提交作业(Job),并将数据输出 Spark系统。

controller

       控制操作:Spark中控制算子也是懒执行的,需要Action算子触发才能执行,主要是为了对数据进行缓存。
控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化,持久化的单位是partition。cache和persist都是懒执行的。必须有一个action类算子触发执行。checkpoint算子不仅能将RDD持久化到磁盘,还能切断RDD之间的依赖关系。
从小方向来说,Spark 算子大致可以分为以下三类:
1)Value数据类型的Transformation算子,这种变换并不触发提交作业,针对处理的数据项是Value型的数据。
2)Key-Value数据类型的Transfromation算子,这种变换并不触发提交作业,针对处理的数据项是Key-Value型的数据对。
3)Action算子,这类算子会触发SparkContext提交Job作业。

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

aggregateByKey 执行算子 和aggregate类似,但是操作的是RDD是Pair类型。

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的数量。。

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类似,只不过是对每一个分区使用。

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() 控制操作 cache只有一个默认的缓存级别MEMORY_ONLY ,而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总的分区数)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值