5,761
社区成员




弹性分布式数据集(Resilient Distributed Datasets,RDD),是一种分布式内存数据抽象,代表一个只读的、可分区的、元素可并行计算的弹性分布式数据集。Datasets,表示这是一个数据集合,用于存放数据,就像Python集合对象一样可以存放数据。Distributed,表示这个数据集中的数据是分布式存储的,可存储于集群中的不同节点上,在进行数据计算的时候可以分布式并行计算。Resilient,表示弹性的,主要体现在几个方面:
(1)存储弹性,表示这个数据集中的数据可以存储在内存或者磁盘中,Spark优先把数据存放到内存中,如果内存存放不下,就会存放到磁盘里面。
(2)容错弹性,RDD采用基于血缘的高效容错机制,在RDD的设计中,数据是只读的不可修改,如果需要修改数据,必须从父RDD转换生成新的子RDD,由此在不同的RDD之间建立血缘关系。因此RDD是天生具有高容错机制的特殊集合,当一个RDD失效的时候,只需要通过重新计算上游的父RDD来重新生成丢失的RDD数据,而不需要通过数据冗余的方式实现容错。
(3)分区弹性,可以根据业务的特征,动态调整数据集的分区的数量,提升应用程序的整体执行效率。
在分布式计算中,我们需要实现分区控制、Shuffle控制、数据存储、数据序列化、数据发送、数据计算等,这些功能不能简单的通过Python内置的本地集合对象去完成,这时候我们就需要RDD。可以认为RDD是分布式的List或者Array。