3.RDD详解和创建RDD方式

Spark 可以简单概括为 3 点:
      Scala 语法
      RDD 操作(Transform & Action
      分布式化
      做 Spark 开发, 其实就是用 Scala 语言进行 RDD 操作, Spark 会自动将 RDD 中的数据分发到集群上, 并将操作并行化执行。
      Java 工程师做分布式开发的话, 常用 MapreduceScala 工程师做分布式开发,
SparkScala 编程语言具有很多优秀特性, 实现相同功能时代码量是 Java 1/5, 而且更加易读易懂。  1.1 RDD



1.1 RDD

Spark 对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称RDD)。

在Spark 中,对数据的所有操作不外乎创建RDD和操作RDD 。而在这一切背后,Spark 会自动将RDD 中的数据分发到集群上,并将操作并行化执行。

 

Spark 中的RDD 就是一个不可变的分布式对象集合。每个RDD 都被分为多个分区,这些分区运行在集群中的不同节点上。RDD 可以包含Python、Java、Scala 中任意类型的对象,

甚至可以包含用户自定义的对象。

1.1 创建RDD

用户可以使用两种方法创建RDD:  

·用SparkContext 的parallelize(Seq) 把Seq转为RDD。该方式常用于学习和实验

·读外部数据,通常是读HDFS、消息队列等。

 

在前边学习中,我们通过SparkContext 的parallelize(Seq)的方法创建RDD,并进行各种学习。

 

先看看parallelize方法:

def parallelize[T](seq: Seq[T], numSlices: Int = defaultParallelism) : RDD[T]    

numSlices是并行度,具有初始值所以调用时可以只给一个参数,这是Scala语言的特性。

 

比如可以parallelize(seq)  ,可以parallelize(seq ,10) ,并行度为10意味着Spark把数据分割为10份,放在集群上运行。

 

defaultParallelism 是机器CPU个数。

# 查看CPU的个数

cat /proc/cpuinfo| grep"processor"| wc -l

Seq 包含List、Array等单元素的集合,见下方Scala集合类的组织架构:

 3.RDD详解和创建RDD方式