spark中RDD的五大特性

mac2022-06-30  119

文章目录

RDD是什么RDD的五大特性和方法RDD的创建方式RDD的操作transformationaction

RDD是什么

下面这个是Spark源码中RDD的第一行描述

A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable,partitioned collection of elements that can be operated on in parallel

1.一个弹性分布式的数据集 2.集合的元素是分区的 3.可以并行计算

RDD的五大特性和方法

1)A list of partitions 一系列分区的集合 方法:protected def getPartitions: Array[Partition]

2)A function for computing each split 针对RDD做操作其实就是针对RDD底层的partition进行操作 方法:def compute(split: Partition, context: TaskContext): Iterator[T]

3)A list of dependencies on other RDDs rdd之间的依赖 protected def getDependencies: Seq[Dependency[_]] = deps

4)a Partitioner for key-value RDDs 对于key-valueRDD可以传递Partitioner进行重新分区 @transient val partitioner: Option[Partitioner] = None

5)a list of preferred locations to compute each split on 最优的位置计算,也就是数据本地化(优先把作业调度到数据所在节点) protected def getPreferredLocations(split: Partition): Seq[String] = Nil

RDD的创建方式

RDD创建有两种方法: 1.parallelize (一般用于测试)

val rdd = sc.parallelize(List(1, 2, 3, 4, 5))

2.External File System (用于生产)

sc.textFile("hdfs://hadoop001:9000/hello/wc.txt")

RDD的操作

RDD的操作包含transformation和action transformation 转换,记录了RDD演变的过程,只有action才会触发transformation进行计算

transformation

算子描述map针对每个元素做操作mapPartitions针对每个分区做操作mapValues针对RDD[key,value]的value做处理flatmapmap+flattenglom把每个分区的数据都放到数组中filter过滤uniona.union(b) 是两个rdd的合并intersectiona.intersection(b)是两个rdd的交集subtract差集distinct去重groupByKey按照key分组,默认map端不合并reduceByKey按照key分组,默认map端合并groupBy自定义分组sortBy自定义排序sortByKey按照key来排序join两个rdd的内连接cogroupjoin的底层就是cogroup

action

算子描述count计算rdd中的元素个数collect把rdd的元素都收集到一个数组中foreach循环每个元素reduce聚合rdd中的元素,rdd.reduce(+)就是每个元素相加first获取第一个元素,底层调用的是take(1)take(n)获取前n个元素top(n)返回最大的前n个元素,底层调用的是takeOrderedtakeOrdered(n)获取最小的前n个元素
最新回复(0)