Spark之核心---RDDs(1)

来源:互联网 发布:淘宝防举报防排查 编辑:程序博客网 时间:2024/06/05 04:50

随着Spark在分布式计算中越来越流行,启用了内存数据分布级,补充Hadoop上对于迭代问题效率较低的问题,同时Spark和scala的完美融合也使Spark更具优越性。本篇将介绍Spark的核心—RDDs的基本概念,创建方法和RDDs的特性三个部分。 RDDs的操作方法将在下一篇具体介绍。

1. RDDs的基本概念

首先了解什么是RDDs:
RDDs(Resilient distributed datasets)即:弹性分布式数据集,它并行分布在整个集群中。**RDDs是spark分布数据和计算的基础抽象类。一个RDD是一个不可改变的分布式集合对象。**Spark中所有的计算都是通过RDDs的创建、转换和操作完成的。
一个RDD内部有许多分片组成(partitions),例如有500条数据,分5个分片存储,那么一个分片上就有100条数据。分片是Spark并行处理的单元,Spark顺序地并行地处理分析。

2. RDDs的创建方法

RDDs有两种创建方法

a.把一个存在的集合传给SparkContext的parallelize()
val rdd = sc.parallelize(Array(1,2,3,4),4)其中sc是一个默认的SparkContext对象,直接调用parallelize方法。Array(1,2,3,4)是初始化的代处理的集合,4是指定的分区个数。
   b.加载外部数据集
val rddText = sc.textFile("../testFile/hellospark.txt")其中hellospark.txt的文件内容如下:   hello spark!   hello world!

这里还要简单介绍下scala的一些用法。

1.scala创建变量用val或者var。二者区别是:val一旦创建变量后,就不能再修改。即一旦分配不能重新指向别的值;var创建变量后还可以指向其他类型相同的值。

2.scala的匿名函数和类型推断

lines.filter(line => line.contains("hello"))这个filter就是一个匿名函数,接收参数为line即使这个函数使用了String类型的contains方法,不过也不用指定line的类型,因为scala能够推断出line的类型。

3. RDDs的特性

a. spark维持着RDDs之间依赖关系和创建关系,叫做血统关系图。RDDs用血统关系图计算每个RDD需求和恢复失去的数据。RDDs用血统关系图计算每个RDD需求和恢复失去的数据。关系图如下:
这里写图片描述

b. 延迟计算特性(lazy Evaluation)
Spark对RDDs的计算:只有action操作时才进行,这样做减少了数据的传输。Spark内部记录metadata,表名transformation操作已被响应。例如加载操作。

c.持久性
Spark的action操作计算的结果会暂时存放在缓存中,如果后续需要结果时,直接使用即可,不必重复计算。例如RDD.persist(),直接获取结果。

原创粉丝点击