一、什么是RDD?
官方说法:
RDD:弹性分布式数据集,是Spark最核心的数据结构。有分区机制,所以可以分布式进行处理。有容错机制,通过RDD之间的依赖关系来恢复数据。
说白了RDD就是spark的一种特有集合,只不过这个集合它有分区属性,通过分区可以实现并行化计算,从而实现了spark高效处理数据的重要原因之一,此外RDD之间还存在着一种父子依赖关系,就向人类血缘关系一样,通过这种关系,可以实现数据的容错,比如说我们子RDD数据丢失了,可以通过计算父RDD重新生成子RDD数据。
二、如何生成RDD?
RDD生成方式有2种:
1.执行tarnsform操作(变换操作)将Scala的其他集合类型转换成RDD形式
如:
parallelize(数据集,分区数)
val data = Array(1,2,3,4)
val RDD1 = sc.parallelize(data, 2)
注意:
在调用parallelize()方法时,有一个重要的参数可以指定,就是要将集合切分成多少个partition。Spark会为每一个partition运行一个task来进行处理。Spark官方的建议是,为集群中的每个CPU创建2-4个partition。Spark默认会根据集群的情况来设置partition的数量。但是也可以在调用parallelize()方法时,传入第二个参数,来设置RDD的partition数量。比如,parallelize(data, 2)
makeRDD(数据集,分区数)
val data2 = List(1,2,3,4)
val RDD2 = sc.makeRDD(data2,2)
注意:
在调用makeRDD()方法时,可以去指定partition个数,如果未指定,则Spark默认会按照RDD的数据量大小划分分区数。
2.通过读取外部存储系统的数据集创建RDD,如HDFS,HBase,或任何与hadoop有关的数据源。
方法:textFile(“数据文件路径”,分区数)
val rdd3 =sc.textFile("J://tmp/1.txt",2)
3.通过父RDD创建子RDD
略