4. RDD

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) 类似上述

猜你喜欢

转载自blog.csdn.net/weixin_42490528/article/details/86032765
rdd