Spark是一个函数式的大数据处理框架,可以让你专注于数据分析,其中RDD是不可变的数据集合,可以进行转换去实现程序逻辑,通常转换次数大于行动次数,但是转换时懒惰的,仅在调用下游的行动时才触发转换操作~
RDD是构成Spark的基础,是容错、数据读取、存储以及转换的基本单元,这些操作与转换、行动相结合,可以用来整合几乎99%的易并行应用程序~
一、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的比例
二、RDD 行动操作
spark的作业是由行动开启执行的,每个行动要么是外部数据存储区的数据出口点,要么是驱动程序的入口点,每个行动调用sparkContext实例来调度其执行~
- 触发数据在外部存储实现物化的行动操作包括:foreach、saveAsTextFile等
- foreach:调用传递的function,作用于RDD中的每个元素
- saveAsTextFile:将RDD作为文本保存在Hadoop兼容的文件系统上
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。