RDD:弹性分布式数据集
五大特性:
1.A list of partitions (分区)
RDD是一个由多个partition(分区)组成的的list;将数据加载为RDD时,一般会遵循数据的本地性(一般一个hdfs里的block会加载为一个partition)。
2.A function for computing each split (函数作用于每个分区)
RDD的每个partition上面都会有function,也就是函数应用,其作用是实现RDD之间partition的转换。
比如说rdd1.map(_*10),把RDD里面的每一个元素取出来乘以10,每个分区都应用这个map的函数。
3.A list of dependencies on other RDDs (记录依赖以便恢复)
RDD会记录它的依赖 ,为了容错(重算,cache,checkpoint),也就是说在内存中的RDD操作时出错或丢失会进行重算。
例如,rdd1.map(_*10).flatMap(..).map(..).reduceByKey(...)
可以看到有很多个阶段,这些阶段叫做stage,RDDstage之间会有依赖关系,后面根据前面的依赖关系来构建,如果前面的数据丢了,它会记住前面的依赖,从前面进行重新恢复。每一个算子都会产生新的RDD.textFile 与flatMap会产生两个RDD.
4.Optionally,a Partitioner for Key-value RDDs (针对key-value的分区器)
可选,决定数据到哪个分区里面,这个RDD是key-value 的时候才能有
5.Optionally, a list of preferred locations to compute each split on (采用最优位置进行运算)
选择最优的位置去计算,也就是数据的本地性。数据在哪台机器上,任务就启在哪个机器上,数据在本地上,不用走网络。不过数据进行最后汇总的时候就要走网络。(hdfs file的block块)
常见的运算,不全
转换:
1. map、flatMap、mapValues
都跟着需要执行的函数
map:执行map里的函数,应用到每个RDD元素上,转换成新的RDD,但可能是分层的
flatMap:基本与map相同,但返回的是扁平化的数据(不分层),详见wordcount实例
mapValues:针对key-value型RDD,key不计算,对value进行计算
2. 拼接:union、join、leftOuterJoin、rightOuterJoin
union:拼接
join:针对key-value型RDD,对相同的key进行拼接,不相同的都不要
leftOuterJoin:针对左边RDD的key来拼接,如果左边有右边没有就补全None
rightOuterJoin:针对右边RDD的key来拼接
intersection():与拼接这种类似求并集的操作对应,intersection是找出相同元素(交集)
3. 一些真对字典RDD的ByKey操作
sortByKey排序、subtractByKey去重
4. 其他
parallelize转换、filter过滤、distinct去重、randomSplit分割
动作:
reduce:执行reduce里的函数来整合所有RDD数据
reduceByKey:类似reduce,针对key-value型RDD
collect():以数组的形式返回数据集的所有元素
first():查看首行数据
take(5):查看前5行数据
count():计数
countByKey():类似count,针对key-value型RDD
status:统计,包括count、mean、stdev(标准差)、max、min
collectAsMap:转化成字典
lookup:根据key查看value
saveAsTextFile(路径):保存为文件,可分为本地文件和hdfs文件
持久化:
intRDD = sc.parallelize([3,2,2,1,5]) # 创建RDD
intRDD.persist() # 持久化
intRDD.is_cached # 查看是否保存到缓存(cached)
intRDD.unpersist() # 取消持久化
intRDD.persist(StorageLevel.MEMORY_AND_DISK) # 设置持久化的存储等级
存储等级分为:
MEMORY_ONLY 仅内存,默认选项
MEMORY_AND_DISK 内存和硬盘
DISK_ONLY 硬盘
MEMORY_ONLY,2 备份,数字表示复制到几个节点
(MEMORY_ONLY_SER) 类似MEMORY_ONLY,更多的使用cpu资源,更少的占用内存
(MEMORY_AND_DISK_SER) 类似上述