RDD的简介

来源:互联网 发布:淘宝求购区在哪里 编辑:程序博客网 时间:2024/06/03 21:10
在spark中,有一个不可变的分布式数据结构,即弹性分布式数据集(RDD),它是逻辑集中的实体,在集群中的多个节点上被分为多个分区。通过对多个节点上不同RDD分区的控制,能够减少机器之间的数据重排(data shuffling)。

Spark提供了一个”partitionBy”运算符,能够通过集群中多个节点之间对原始RDD进行数据再分配来创建一个新的RDD。

RDD是spark的核心数据结构,通过RDD的依赖关系形成spark的调度顺序。通过对RDD的操作形成整个spark程序。

RDD 可以包含 Python、Java、Scala 中任意类型的对象,甚至可以包含用户自定义的对象。

(1)RDD的三种生成方式
1)从Hadoop文件系统(与Hadoop兼容的其他持久化存储系统,如Hive、Cassandra、Hbase)输入(如HDFS)创建。
例如:
>>> lines = sc.textFile("test.txt")

2)在驱动器程序里分发驱动器程序中的对象集合(比如list和set)。
>>> lines = sc.parallelize(List(1,2,3))

3)从父RDD转换得到新的RDD
>>>testlines = lines.filter(line=>line.contains("spark"))
 
RDD其实并没有存储数据,只是数据的一个映像,RDD的内部属性有以下部分:

1)分区列表。

2)计算每个分区的函数

3)对父RDD的依赖列表

4)对key-Value对数据类型RDD的分区器,控制分区策略和分区数

5)每个数据分区的地址列表(如HDFS上的数据块的地址)
 
RDD支持粗粒度和细粒度的读操作。RDD上的很多函数操作(count和collect等)都是批量读操作,即扫描整个数据集,可以将任务分配到距离数据最近的节点上。同时,RDD也支持细粒度操作,即在哈希或范围分区的RDD上执行关键字查找。
0 0
原创粉丝点击