3.1 RDD基础
RDD——弹性分布式数据集。每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。RDD可以包含python、java、scala中任意类型的对象,甚至可以包含用户自定义的对象。
用户可以通过两种方式创建RDD:读取外部数据集和通过对象集合创建。
创建后的RDD支持两类操作:转化操作和行动操作。
转化操作会由一个RDD生成一个新的RDD。
行动操作会对RDD计算出一个结果,并把结果返回。
每个spark程序或者shell会话都按照如下方式工作:
1) 从外部数据创建出输入的RDD
2) 使用转化操作对RDD进行转化,定义新的RDD
3) 通知spark对需要被重用的中间结果RDD执行persist()操作
4) 使用行动操作来出发一次并行计算,spark会对计算进行优化后再执行。
3.2 创建RDD
读取外部数据,例如:
val lines=sc.textFile("readme.md")
对集合进行并行化,例如:
val lines=sc.parallelize(List("a","b","c"))
3.3 RDD操作
3.3.1 转化操作
转化操作返回新的RDD,是惰性操作。例如map()和filter()
3.3.2 行动操作
行动操作对数据集进行实际的计算。例如count()和take()
3.3.3 惰性求值
RDD的转化操作都是惰性求值,也就意味着在调用行动操作之前spark不会开始计算
spark惰性求值可以把一些操作合并到一起来减少计算数据的步骤。
3.4 常见的转化操作和行动操作
1.转化操作
1). 对一个RDD进行基本的RDD转化操作
例如对数据集{1,2,3,3}
2). 对针对两个RDD的转化操作
例如对数据集{1,2,3}和{3,4,5}
2.行动操作
例如对数据集{1,2,3,3}