在Spark框架组件当中,核心部分不得不提到一个重要的概念,叫做RDD。而这个RDD,本身来说,也是Spark框架相比早期的Hadoop MapReduce框架实现了性能提升的重要一步。今天的大数据学习分享,我们就来讲讲,Spark RDD操作入门。

RDD简介

RDD,全称是Resilient Distributed Dataset,翻译过来叫做弹性分布式数据集,属于分布式的内存系统的数据集应用。

spark使用hadoop api spark hadooprdd_驱动程序

Spark之所在在前代计算框架上实现了技能提升,很大程度上就是来自于RDD的功劳。RDD本身的特性,使得它能与其他系统兼容,可以导入外部存储系统的数据集,例如,HDFS、HBase或者其他Hadoop数据源。

RDD是构成Spark的基础,是容错、数据读取、存储以及转换的基本单元,这些操作与转换、行动相结合,可以用来整合几乎99%的易并行应用程序。

RDD转换操作(Transformation)

RDD转换操作,通常分为三类,映射转换、变化转换以及混合转换。

映射转换,包括map、flatMap、mapPartitions、filter等。

map:调用用户提供的function,作用于输入RDD中的每个数据点;

flatMap:与map相同,但是输出的大小可能与输入RDD的大小不同;

mapPartitions:调用传递的function,作用于RDD中的每个分区;

filter:过滤掉符合特定条件的值,提供的function需要返回域给定条件对应的布尔值。

变化转换,包括coalesce、repartition、union、intersection、groupByKey、sortByKey等。

coalesce:减少一个RDD中的分区数;

repartition:增加或减少RDD中的分区数;

union:返回与另一个RDD的并集;

intersection:返回与另一个RDD的交集;

groupByKey:按key对值进行分组,返回的RDD包含每个组的键值对,其中值是已分组的值得迭代器;

sortByKey:按key对RDD进行排序,默认对key进行升序排序;

reduceByKey:使用提供的function聚合每个key的值,采用RDD的第一个元素作为其内部累加器的初始值;

foldByKey:与reduceByKey类似,但使用initialValue初始化内部累加器;

combineByKey:聚合RDD的值,但允许聚合函数的返回值类型与输入类型不同。需要3个函数作为参数,第一个是createCombiner 初始化累加器;第二个是mergeValue 合并相同键的值;第三个是mergeCombines 合并两个累加器;

aggregateByKey:类似于combineByKey,但第一个参数是initialValue作为初始参数;

join:在一个RDD和另外一个RDD上执行内部连接。

混合转换,包含cartesian、distinct、pipe、sample等。

cartesian:取两个RDD的笛卡尔乘积;

distinct:返回去重的RDD;

pipe:执行一个外部命令,并通过它输送RDD的元素;

sample:RDD元素随机子集的抽样,第一个参数决定是否可以对元素进行多次抽样,第二个参数决定抽样数量占该RDD的比例。

spark使用hadoop api spark hadooprdd_驱动程序_02

RDD行动操作(Action)

spark的作业是由行动开启执行的,每个行动要么是外部数据存储区的数据出口点,要么是驱动程序的入口点,每个行动调用sparkContext实例来调度其执行。

触发数据在外部存储实现物化的行动操作包括:foreach、saveAsTextFile等。

foreach:调用传递的function,作用于RDD中的每个元素;

saveAsTextFile:将RDD作为文本保存在Hadoop兼容的文件系统上。

在驱动程序中实现数据物化的行动操作包括:

reduce:在RDD中调用用户自定义的函数,作用于每个键值对的值,将结果返回给驱动程序,需要注意reduce是行动,但是reduceByKey不是;

collect:以数组形式将RDD所有内容返回给驱动程序;

count:计算RDD中的元素个数;

take:以数组形式返回RDD中的前n个元素;

first:返回RDD中的第一个元素;

takeOrdered:从RDD底部返回k个元素;

top:从RDD顶部返回k个元素;

lookup:返回域键相关联的值列表。

关于大数据学习,Spark RDD操作入门,以上就为大家做了简单的介绍了。Spark的学习,RDD的概念一定是需要深入理解并掌握的,对于RDD的Transformation和Action操作,也一定要明了。