3.4.1 Spark RDD - 概念与简单理解

简介

Spark是一个计算引擎,是MapReduce的高配升级版本。

Spark RDD是Spark中的核心理念。

 

Spark RDD概念

Spark建立在统一抽象的RDD之上,使得它可以以基本一致的方式应对不同的大数据处理场景,包括MapReduce,Streaming,SQL,Machine Learning以及Graph等。

RDD的全称为Resilient Distributed Datasets,即弹性分布式数据集Spark中最基本的数据抽象,它代表一个不可变可分区可并行计算的集合

RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中(当内存不够只有存储在磁盘上),后续的查询能够重用工作集,这极大地提升了查询速度。

 

Spark RDD理解

其实RDD的理解很简单,看英文:Resilient Distributed Datasets。Resilient与Distributed都是形容词,不重要。关键是最后一个词:“Datasets”。也就是说,RDD其实就是数据的集合。

只不过,与传统的数据集不同,RDD是特殊的数据集,它具有如下两个别具特色的亮点:

  • Resilient:弹性的。这就是说RDD是具有可伸缩性的,可分区的。
  • Distributed:分布式的。这是说RDD是可被用作并行计算的。

RDD就是依靠这种数据集的弹性与可分布式计算,成为了Spark中的核心思想。

 

那么RDD是用来做什么的?它在Spark中是什么地位?

简单的说,RDD是放数据的容器。

但是,注意,RDD存放的是数据位置的指针,就是指向数据实际存放位置的路标,实际数据不在RDD里面。

 

我用个实际Python的例子讲一下就好理解了。

假设,我们要用Anaconda中的Spyder工具,通过Python进行下面的预测:

  • 通过猫的年龄,预测猫的体重。

我们不能直接拿着Excel中的文件或者HDFS里的一个个文件做计算,所以要先把这些数据文件转化成能用Python/Scala操作的数据集。

假设,我们现在手里有一个名为orange_cat.csv文件,csv里面有猫的年龄跟体重。我们现在要预测了,我打开Spyder,首先要做的肯定不是上来就写代码,建个回归模型。我应该先要:导入文件。

因为在Spyder中,人家不能直接操作存在我Windows里面的csv文件。所以,我要先把这些数据读到Spyder里面,Python才能做处理。

即,我要通过下面的语句把文件导入到Spyder里(前面导入包、设定默认路径的常规操作自行脑补):

dataSet = pd.read_csv(“orange_cat.csv”)

通过上面这个语句,我们就把原先在我电脑里面的那个“csv”文件转化成Python能够处理的dataSet文件,并且放在内存里,供Python处理。

执行完,我们发现,就能在Spyder中自行通过各种Python语言操作dataSet中的数据了,而这个dataSet中存的数据,是与之前orange_cat.csv中的数据一模一样的。我们之后,可以在与源数据(本例中即我的Windows)完全无关的地方(内存中)随意用Python语言对dataSet中的数据分析清洗建模了。

这里的dataSet,它的意义,与RDD是一样的。

区别仅仅在于,RDD是个更加牛逼一点的dataset,它不但能分区,也能并行计算,能处理海量数据,在大数据平台运行。而且,不像普通的DataSet直接存数据,人家存的是数据的位置。可以通过位置指定到内存或者磁盘中。

但是,就像老虎还是猫科的道理一样,RDD说到底,还是个Datasets。

当然,这是我在阅读了很多材料之后的个人理解,如果有不同的或者我理解有误的地方,欢迎指正!谢谢!

你可能感兴趣的:(数据分析与挖掘框架,大数据)