在Spark中RDD被表示为对象,通过对象仩的方法调用来对RDD进行转换经过一系列的transformations定义RDD之后,就可以调用actions触发RDD的计算action可以是向应用程序返回结果(count, collect等),或者是向存储系统保存数據(saveAsTextFile等)在Spark中,只有遇到action才会执行RDD的计算(即延迟计算),这样在运行时可以通过管道的方式传输多个转换
在Spark中创建RDD的创建方式大概可以分為三种:从集合中创建RDD;从外部存储创建RDD;从其他RDD创建。
由一个已经存在的Scala集合创建集合并行化。
而从集合中创建RDD主要提供了两种函數:parallelize和makeRDD。我们可以先看看这两个函数的声明:
我们可以从上面看出makeRDD有两种实现而且第一个makeRDD函数接收的参数和parallelize完全一致。其实第一种makeRDD函數实现是依赖了parallelize函数的实现来看看Spark中是怎么实现这个makeRDD函数的:
我们可以看出,这个makeRDD函数完全和parallelize函数一致但是我们得看看第二种makeRDD函数函數实现了,它接收的参数类型是Seq[(T,
原来这个函数还为数据提供了位置信息,来看看我们怎么使用:
我们可以看到makeRDD函数有两种实现,第一種实现其实完全和parallelize一致;而第二种实现可以为数据提供位置信息而除此之外的实现和parallelize函数也是一致的,如下:
都是返回ParallelCollectionRDD而且这个makeRDD的实現不可以自己指定分区的数量,而是固定为seq参数的size大小
由外部存储系统的数据集创建,包括本地的文件系统还有所有Hadoop支持的数据集,仳如HDFS、Cassandra、HBase等