Spark RDD入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/likaiasddsa/article/details/89925878

Spark RDD 入门

什么是RDD

Resilient Distributed Dataset (RDD): 弹性分布式数据集。Spark 中的一个基础抽象概念。它表示一个 不可变的、分区的、可以并行计算的元素的集合。这个类包含了所有RDD 可以进行的基础的操作。例如:map、filter、persist。

RDD函数扩展

Spark 通过隐式转换的方法提供这些函数。

PairRDDFunctions: 提供键值对类型的 RDD[(K, V)] 的常用操作。例如:groupByKey、join。
DoubleRDDFunctions: 提供Double类型的 RDD[ Double ] 的常用操作。例如:sum等计算。
SequenceFileRDDFunctions: 提供键值对类型的 RDD[(K, V)] 的创建 Hadoop SequenceFile 的操作。例如:saveAsSequenceFile。

Spark 的所有调度和执行都是基于这些函数。允许每个RDD可以通过自己实现的方法去计算自己。甚至我们可以自定义RDD。

RDD 五大特性

1.分区的列表
2.计算每个分区的函数
3.RDD依赖的其他的RDD 列表
4.键值对RDD的分区函数
5.计算每个分区时的优先位置列表。

RDD创建

创建RDD有两种方法:并行化驱动程序中的现有集合,或引用外部存储系统中的数据集,例如共享文件系统,HDFS,HBase或提供Hadoop InputFormat的任何数据源。

val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)

val distFile = sc.textFile(“data.txt”)

RDD操作

RDD支持两种类型的操作:转换(从现有数据集创建新数据集)和操作(在数据集上运行计算后将值返回到驱动程序)。例如,map是一个转换,它通过一个函数传递每个数据集元素,并返回一个表示结果的新RDD。另一方面,reduce是一个使用某个函数聚合RDD的所有元素并将最终结果返回给驱动程序的动作(尽管还有一个reduceByKey返回分布式数据集的并行)。

Spark中的所有转换都是惰性的,因为它们不会立即计算结果。相反,他们只记得应用于某些基础数据集的转换(例如文件)。仅当操作需要将结果返回到驱动程序时才会计算转换。这种设计使Spark能够更有效地运行

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

转换

map(func):返回通过函数func传递源的每个元素形成的新分布式数据集。

filter(func):返回通过选择func返回true 的源元素形成的新数据集。

flatMap(func):与map类似,但每个输入项可以映射到0个或更多输出项(因此func应该返回Seq而不是单个项)。

mapPartitions(func):与map类似,但在RDD的每个分区(块)上单独运行,因此当在类型T的RDD上运行时,func必须是Iterator => Iterator 类型。

groupByKey([numPartitions]):在(K,V)对的数据集上调用时,返回(K,Iterable )对的数据集。
groupByKey 效率较低 ,尽量减少使用

reduceByKey(func, [numPartitions]):当调用(K,V)对的数据集时,返回(K,V)对的数据集,其中使用给定的reduce函数func聚合每个键的值,该函数必须是类型(V,V)=> V.同样groupByKey,reduce任务的数量可通过可选的第二个参数进行配置。

sortByKey([ascending], [numPartitions]):当在K实现Ordered的(K,V)对的数据集上调用时,返回按键按升序或降序排序的(K,V)对的数据集,如布尔ascending参数中所指定的。

操作

reduce(func):使用函数func(它接受两个参数并返回一个)来聚合数据集的元素。该函数应该是可交换的和关联的,以便可以并行正确计算。

collect():在驱动程序中将数据集的所有元素作为数组返回。在过滤器或其他返回足够小的数据子集的操作之后,这通常很有用。

count():返回数据集中的元素数。

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

take(n):返回包含数据集的前n个元素的数组。

saveAsTextFile(path):将数据集的元素作为文本文件(或文本文件集)写入本地文件系统,HDFS或任何其他Hadoop支持的文件系统的给定目录中。Spark将在每个元素上调用toString,将其转换为文件中的一行文本。

countByKey():仅适用于类型(K,V)的RDD。返回(K,Int)对的散列映射,其中包含每个键的计数。

猜你喜欢

转载自blog.csdn.net/likaiasddsa/article/details/89925878