一:什么是RDD
spark之中的RDD就是分布式对象集合,每个RDD可以分为不同的分区,这些分区运行在不同的节点之上。对于RDD一般有两种操作,转化操作和行动操作,注意转化操作是惰性的,也就是等待执行行动操作才会执行转化操作。默认情况下spark会对每次行动操作都重新计算,如果想要重用,使用RDD.Persist()把这个RDD缓存下来

二:创建RDD
1:从外部文件读取为RDD
2:代码集合等创建RDD
三:RDD操作
1:转化操作
(1)fifter操作不会改变原来的RDD,会返回一个新的RDD
(2)union操作连接操作,连接两个RDD
2:行动操作
(1)take函数获取RDD的前几行, 这种取值是随机的
(2)collection会汇总RDD的所有数据到内存之中,所以这种操作应该避免在集群上进行操作,可以在test阶段观察结果
四:传递函数
spark支持函数式变成,具体参考《Java8函数式编程》
五:常见的转化操作和行动操作
(1)针对各个元素的转化操作map,将原RDD映射为一个新的RDD
(2)faltMap映射结果为一对多
(3)distinct操作返回一个只包含不同元素的RDD,开销很大,会通过网路在各个节点之间交换数据进行shuffle
(4)union返回一个包含两个RDD所有元素的RDD
(5)intersection返回两个RDD共有的元素,注意其会去除重复的元素,所以性能很差,因为要在各个节点之中交换数据去除重复的
(6)subtract,接受另一个RDD,返回只存在第一个RDD不存在第二个RDD之中的元素组成的RDD,同样需要shuffle
(7)cartesian返回两个RDD的笛卡尔积
(8)reduct函数是行动操作,可以求元素累加、元素个数和其他类型的聚合操作,要求返回值类型和reduct之中的类型必须相同
(9)agregate函数可用来求平均值,不需要返回值类型和操作的类型相同
(10)collect函数,收集所有的RDD的元素
(11)take(n)
六:持久化
为了避免重复计算,可以选择让Spark持久化已经计算的RDD,如果某个节点缓存丢失,那么使用的时候Spark会重算丢失的数据,如果不希望因此拖慢速度可以选择备份RDD到多个节点之上 默认情况下persist会把数据缓存到JVM的堆内存上
