Spark 可以简单概括为 3 点:
Scala 语法
RDD 操作(Transform & Action)
分布式化
做 Spark 开发, 其实就是用 Scala 语言进行 RDD 操作, Spark 会自动将 RDD 中的数据分发到集群上, 并将操作并行化执行。
Java 工程师做分布式开发的话, 常用 Mapreduce。而 Scala 工程师做分布式开发,用 Spark, Scala 编程语言具有很多优秀特性, 实现相同功能时代码量是 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集合类的组织架构: