RDD resilient distributed dataset 弹性分布式数据集
在spark 中对数据的所有操作均可归类为:创建RDD,转化已有RDD,调用RDD操作求值。
每个RDD可以被分为多个分区,这些分区运行在集群的不同节点上,RDD可以包含python,scala,java等任意类型的对象。
创建RDD方法;
1 读取外部数据集 SparkContext.textFile
2 在驱动程序中分发驱动程序中的对象集合
RDD支持两种操作:
1转化操作 transformation 由一个RDD生成新的RDD
2行动操作action 对RDD计算出一个结果,并将结果返回到驱动器程序中,或存放到外部存储系统(HDFS)
只在首次调用一个行动操作时才会真正计算;
每次进行行动操作时RDD会重新计算,如果想要重复使用一个RDD,则需要用RDD.persist()缓存到内存或者磁盘上,实际操作中经常会将数据的一部分读取到内存中,反复查询。
二 创建RDD
程序中已有的集合传给sparkcontext sc.parralelize()
读取外部数据 sc.textFile()
三 RDD操作
转化操作 从一个RDD生成另一个RDD
spark会使用谱系图记录RDD间的依赖关系
行动操作 对RDD 操作得出结果反馈给驱动程序或者输出 collect 会把RDD的数据存放在本地内存中,写到HDFS或S3 saveAsTextFile() saveAsSequenceFile()
四 向Spark传递函数
转化操作和行动操作依赖于用户传递的函数计算 python scala 和Java均可实现,前两者支持匿名函数
Function<T,R> 实现方法 R call (T)
Function2<T1,T2,R> 实现方法 R call (T1,T2)
FlatMapFunction<T,R> 实现方法 Iterable<R> call (T)
五 常见的转化操作和行动操作
针对各个元素的转化操作 map(),filter()
对每个元素生成多个输出元素 flatmap()返回值序列的迭代器
伪集合操作 将RDD看做时元素的集合
distinct(),union(),intersection(),subtract(),笛卡尔积 catesian()
行动操作 reduce() 返回类型与RDD元素类型一样 aggregate()可以不一致。collect() 返回驱动器数据
不同RDD类型间进行转换,在Java中有专门的类,要构建特殊类型的RDD 比如JavaDoubleRDD,JavaPairRDD,需要特殊的function类
在python中所有函数都实现在基本的RDD类中
【转】https://blog.csdn.net/weixin_40988315/article/details/82114134
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |