Spark算子详解及案例分析

原文:https://cloud.tencent.com/developer/article/1085207

目录

一、分类

二、Value型Transformation算子

三、Key-Value型Transformation算子

输入输出分区1对1

聚集

连接

四、Actions算子


一、分类

1、Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Value型的数据。   

2、Key-Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Key-Value型的数据。   

扫描二维码关注公众号,回复: 11597294 查看本文章

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的聚集是串行的。

猜你喜欢

转载自blog.csdn.net/yuan1164345228/article/details/108173763
今日推荐