RDD就是一个不可变的分布式对象集合。
创建
RDD: 1)读取一个外部数据集(SparkContext.textFile());
2)在驱动器程序中对一个集合进行并行化。
RDD 操 作: 1)转 化 操 作(transformation):
会由一个
RDD
生成一个新的
RDD。
2)行 动 操 作
(
action):会对 RDD 计算出一个结果,并把结果返回到驱动器程序中,或存储到外部存储系统(如 HDFS)中。
转化操作:union() 、filter()
行动操作:count() 、take() 、collect()
filter:RDD过滤数据;
union:两个RDD操作;
count:RDD计数;
take:获取RDD少量数据;
collect:获取RDD全部数据。
转化操作和行动操作的区别:在于 Spark计算 RDD的方式不同,转化操作返回的是 RDD,而行动操作返回的是其他的数据类型。
RDD 的
转化操作都是
惰性求值的。意味着在被调用行动操作之前 Spark 不会开始计算。
Spark
程序 或 shell会话 工作方式:
(1) 从外部数据创建出输入 RDD
。
(2) 使用诸如
fifi
lter()
这样的转化操作对
RDD
进行转化,以定义新的
RDD
。
(3) 告诉
Spark
对需要被重用的中间结果
RDD
执行
persist()
操作。
(4) 使用行动操作(例如
count()
和
fifi
rst()
等)来触发一次并行计算,
Spark 会对计算进行优化后再执行。
RDD.persist() 让 Spark 把 RDD 数据缓存,将内容保存到内存中(以分区方式存储到集群中的各机器上),这样在之后的行动操作中,就可以重用这些数据了。
谱系图(lineage graph):记录这些不同 RDD 之间的依赖关系(Spark在持久化的 RDD 丢失部分数据时,可以依靠谱系图恢复所丢失的数据)。