[图片摘自[Spark 官网](http://spark.apache.org/)]
RDD 全称 Resilient Distributed Datasets,是 Spark 中的抽象数据结构类型,任何数据在Spark中都被表示为RDD。 Spark 建立在统一抽象的RDD之上,使得它可以以基本一致的方式应对不同的大数据处理场景,包括MapReduce,Streaming,SQL,Machine Learning 等。
简单的理解就是 RDD 就是一个数据结构,不过这个数据结构中的数据是分布式存储的,Spark 中封装了对 RDD 的各种操作,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。
RDD 是 Spark 的核心,也是整个 Spark 的架构基础。它的特性可以总结如下:
本文中的例子全部基于 Spark-shell,需要的请自行安装。
创建 RDD 主要有两种方式,一种是使用 SparkContext 的 parallelize 方法创建并行集合,还有一种是通过外部外部数据集的方法创建,比如本地文件系统,HDFS,HBase,Cassandra等。
使用 parallelize 方法从普通数组中创建 RDD:
scala> val a = sc.parallelize(1 to 9, 3)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:21
parallelize 方法接受两个参数,第一个是数据集合,第二个是切片的个数,表示将数据存放在几个分区中。
一旦创建完成,这个分布式数据集(a)就可以被并行操作。例如,我们可以调用 a.reduce((m, n) => m + n) 将这个数组中的元素相加。 更多的操作请见 Spark RDD 操作。
文本文件 RDDs 可以使用 SparkContext 的 textFile 方法创建。 在这个方法里传入文件的 URI (机器上的本地路径或 hdfs://,s3n:// 等),然后它会将文件读取成一个行集合。
读取文件 test.txt 来创建RDD,文件中的每一行就是RDD中的一个元素。
scala> val b = sc.textFile("test.txt")
b: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at textFile at <console>:21
一旦创建完成,(b) 就能做数据集操作。例如,我们可以用下面的方式使用 map 和 reduce 操作将所有行的长度相加: b.map(s => s.length).reduce((m, n) => m + n)
scala> b.collect
res1: Array[String] = Array(Spark, RDD, Transformations, Actions)
scala> b.map(s => s.length).reduce((m, n) => m + n))
res2: Int = 30
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有