揭秘Spark中RDD算子是什么

1、RDD基础

        RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

 

二.官网介绍:

Internally, each RDD is characterized by five main properties:

  • A list of partitions
  • A function for computing each split
  • A list of dependencies on other RDDs
  • Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
  • Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

在内部,每个RDD具有五个主要属性:

  • 分区列表
  • 用于计算每个拆分的函数
  • 对其他RDD的依赖关系列表
  • 可选地,一个用于键值RDD的分区程序(例如,该RDD是哈希分区的)
  • (可选)用于计算每个分割的首选位置列表(例如,HDFS文件的块位置)

三.深入理解

  • 一组分片(Partition,即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。
  • 一个计算每个分区的函数。Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。RDD是由一组分区组成,用来来计算分区中的数据的函数,算子
  • RDD之间的依赖关系。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。
  • 一个Partitioner,即RDD的分片函数。当前Spark中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner。只有对于key-value的RDD,才会有Partitioner,非key-value的RDD的Parititioner的值是None。Partitioner函数不但决定了RDD本身的分片数量,也决定了parent RDD Shuffle输出时的分片数量。另一种:自定义分区(类似mr自定义分区)
  • 一个列表,存储存取每个Partition的优先位置(preferred location)。对于一个HDFS文件来说,这个列表保存的就是每个Partition所在的块的位置。按照“移动数据不如移动计算”的理念,Spark在进行任务调度的时候,会尽可能地将计算任务分配到其所要处理数据块的存储位置。优先选择离文件位置最近的节点运行程序

四.创建RDD

1.通过外部的数据源,如HDFS

val rdd1 = sc.textFile(“hdfs://192.168.88.111:9000/data/data.txt”)

 

2.通过sc.parallelize进行创建

val rdd1 = sc.parallelize(Array(1,2,3,4,5,6,7,8))

 

五.RDD的类型:TransformationAction

1.Transformation(转换):延时计算的:lazy,parallelize,map,reduceByKey

​    2.Action(行动):立即运行算子,collect,saveAsTextFile

                                                                                                                            ————保持饥饿,保持学习

                                                                                                                                                 Jackson_MVP

                                                                                                                                                                          

 

发布了108 篇原创文章 · 获赞 10 · 访问量 4317

猜你喜欢

转载自blog.csdn.net/Jackson_mvp/article/details/104064889