大数据技术,Spark之RDD,RDD的两种算子介绍
小职 2020-08-20 来源 : 阅读 1139 评论 0

摘要:​关于大数据技术中,Spark之RDD,RDD的两种算子介绍,希望能对大数据有更深刻的了解。

关于大数据技术中,Spark之RDD,RDD的两种算子介绍,希望能对大数据有更深刻的了解。

大数据技术,Spark之RDD,RDD的两种算子介绍

RDD有两种类型的算子操作。一种是TransFormation这种只记录逻辑关系的转型型算子,一种是Action这种基于一个数据集进行运算的计算算子。比如,Map是一个TransFormation算子,Map将数据集的每一个元素按指定的函数转换为一个RDD返回。而Reduce是一个Action算子。

一、TransFormation介绍

Spark的所有TransFormation操作都是懒执行,它们并不立马执行,只是先记录对数据集的一系列TransFormation操作。这种设计让Spark的运算更加高效,如对一个数据集进行map操作之后使用reduce只返回结果,而不返回庞大的map运算的结果集。

大数据技术,Spark之RDD,RDD的两种算子介绍
1、map算子

将原来RDD的每个数据项,使用map中用户自定义的函数func进行映射,转变为一个新的元素,并返回一个新的RDD。

2、filter算子

使用函数func对原RDD中数据项进行过滤,将符合func中条件的数据项组成新的RDD返回。

3、flatMap算子

类似于map,但是输入数据项可以被映射到0个或多个输出数据集合中,所以函数func的返回值是一个数据项集合而不是一个单一的数据项。

4、mapPartitions算子

类似于map,但是该操作是在每个分区上分别执行,所以当操作一个类型为T的RDD时func的格式必须是Iterator<T> => Iterator<U>。即mapPartitions需要获取到每个分区的迭代器,在函数中通过这个分区的迭代器对整个分区的元素进行操作。

5、mapPartitionsWithIndex算子

类似于mapPartitions,但是需要提供给func一个整型值,这个整型值是分区的索引,所以当处理T类型的RDD时,func的格式必须为(Int, Iterator<T>) => Iterator<U>。

6、union(otherDataset)算子

返回原数据集和参数指定的数据集合并后的数据集。使用union函数时需要保证两个RDD元素的数据类型相同,返回的RDD数据类型和被合并的RDD元素数据类型相同。该操作不进行去重操作,返回的结果会保存所有元素。如果想去重,可以使用distinct()。

7、intersection(otherDataset)算子

返回两个数据集的交集。

8、distinct算子

将RDD中的元素进行去重操作。

9、groupByKey算子

操作(K,V)格式的数据集,返回 (K, Iterable)格式的数据集。注意,如果分组是为了按key进行聚合操作(例如,计算sum、average),此时使用reduceByKey或aggregateByKey计算效率会更高。默认情况下,并行情况取决于父RDD的分区数,但可以通过参数numTasks来设置任务数。

10、reduceByKey算子

使用给定的func,将(K,V)对格式的数据集中key相同的值进行聚集,其中func的格式必须为(V,V) => V。可选参数numTasks可以指定reduce任务的数目。

11、aggregateByKey(zeroValue)(seqOp, combOp,[numTasks])

对(K,V)格式的数据按key进行聚合操作,聚合时使用给定的合并函数和一个初始值,返回一个(K,U)对格式数据。需要指定的三个参数:zeroValue为在每个分区中,对key值第一次读取V类型的值时,使用的U类型的初始变量;seqOp用于在每个分区中,相同的key中V类型的值合并到zeroValue创建的U类型的变量中。combOp是对重新分区后两个分区中传入的U类型数据的合并函数。

12、sortByKey算子

(K,V)格式的数据集,其中K已实现了Ordered,经过sortByKey操作返回排序后的数据集。指定布尔值参数ascending来指定升序或降序排列。

大数据技术,Spark之RDD,RDD的两种算子介绍
13、join算子

用于操作两个键值对格式的数据集,操作两个数据集(K,V)和(K,W)返回(K, (V, W))格式的数据集。通过leftOuterJoin、rightOuterJoin、fullOuterJoin完成外连接操作。

14、cogroup算子

用于操作两个键值对格式数据集(K,V)和(K,W),返回数据集格式为 (K,(Iterable, Iterable)) 。这个操作也称为groupWith。对在两个RDD中的Key-Value类型的元素,每个RDD相同Key的元素分别聚合为一个集合,并且返回两个RDD中对应Key的元素集合的迭代器。

15、cartesian算子

对类型为T和U的两个数据集进行操作,返回包含两个数据集所有元素对的(T,U)格式的数据集。即对两个RDD内的所有元素进行笛卡尔积操作。

16、pipe算子

以管道(pipe)方式将 RDD的各个分区(partition)使用 shell命令处理(比如一个 Perl或 bash脚本)。RDD的元素会被写入进程的标准输入(stdin),将进程返回的一个字符串型 RDD(RDD of strings),以一行文本的形式写入进程的标准输出(stdout)中。

17、coalesce算子

把RDD的分区数降低到通过参数numPartitions指定的值。在得到的更大一些数据集上执行操作,会更加高效。

18、repartition算子

随机地对RDD的数据重新洗牌(Reshuffle),从而创建更多或更少的分区,以平衡数据。总是对网络上的所有数据进行洗牌(shuffles)。

二、Action算子介绍

一般来说,每个转换的RDD在执行action操作时都会重新计算。即使两个action操作会使用同一个转换的RDD,该RDD也会重新计算。除非使用persist方法或cache方法将RDD缓存到内存,这样在下次使用这个RDD时将会提高计算效率,也支持将RDD持久化到硬盘上,或在多个节点上复制。

1、reduce算子

使用函数func聚集数据集中的元素,这个函数func输入为两个元素,返回为一个元素。这个函数应该符合结合律和交换了,这样才能保证数据集中各个元素计算的正确性。

2、collect算子

在驱动程序中,以数组的形式返回数据集的所有元素。通常用于filter或其它产生了大量小数据集的情况。

3、count算子

返回数据集中元素的个数。

4、first算子

返回数据集中的第一个元素(类似于take(1))。

5、take(n)算子

返回数据集中的前n个元素。

6、takeOrdered(n, [ordering])算子

返回RDD按自然顺序或自定义顺序排序后的前n个元素。

7、saveAsTextFile算子

将数据集中的元素以文本文件的形式保存到指定的本地文件系统、HDFS或其它Hadoop支持的文件系统中。Spark将在每个元素上调用toString方法,将数据元素转换为文本文件中的一行记录。

8、saveAsSequenceFile(path) 算子

将数据集中的元素以Hadoop Sequence文件的形式保存到指定的本地文件系统、HDFS或其它Hadoop支持的文件系统中。该操作只支持对实现了Hadoop的Writable接口的键值对RDD进行操作。

9、saveAsObjectFile(path) 算子

将数据集中的元素以简单的Java序列化的格式写入指定的路径。这些保存该数据的文件,可以使用SparkContext.objectFile()进行加载。

10、countByKey算子

仅支持对(K,V)格式的键值对类型的RDD进行操作。返回(K,Int)格式的Hashmap,(K,Int)为每个key值对应的记录数目。

11、foreach算子

对数据集中每个元素使用函数func进行处理。该操作通常用于更新一个累加器(Accumulator)或与外部数据源进行交互。注意:在foreach()之外修改累加器变量可能引起不确定的后果。


本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程