综述
Scala语言写成的一套分布式内存计算系统,核心抽象模型是 RDD (弹性分布式数据集)
在Spark之上还有一些工具: 支持用Sql查询的Spark SQL、支持流式计算的 Spark Streaming、机器学习库 MLlib 、专门图数据处理的 GraphX。
SparkContext
- 任何Spark程序的编写都是从 SparkContext 开始, SparkContext 的初始化需要一个 SparkConf 对象,后者包含了Spark集群配置的各种参数。
- 初始化后,便可使用 SC 对象包含的各种方法来创建和操作分布式数据集和共享变量, Spark Shell 可以自动完成上述初始化 。
val conf = new SparkConf().setAppName("Test Spark")
val sc = new SparkContext(conf)
- 如果想使用 Spark Shell, 只需从主目录执行 ./bin/spark-shell ,它会启动一个Scala shell, 并自动初始化一个 Spark Context 对象。 我们可以通过 sc 这个Scala值调用这个对象。
RDD
- RDD 是Spark中的抽象数据类型,从编程的角度,RDD就是一个数组。
- Resilient Distributed Dataset,弹性分布式数据集,一个RDD代表一系列的记录,这些记录被分配到一个集群的多个节点上。创建RDD后,我们就有了一个可供操作的分布式记录集。在Spark编程模式下,所有的操作都被分为转换和执行。 Transformation、Action。
RDD对象的创建:
sc.parallelize(collection)
sc.textFile(“license”)
map 与 flatmap 的区别
map操作以 列表 和 函数f 为操作元,返回把函数f应用在每个列表元素之后,组成的新列表。
flatMap与map类似,不同的是,它对列表的每个元素应用函数 f 后,连接所有函数的结果并返回。
foreach 与 map 类似,不过它的函数 f 返回Unit,它只是对每个列表元素调用一遍过程,操作的结果仍然是Unit
val words = List("the", "quick", "brown", "fox")
//words: List[String] = List(the, quick, brown, fox)
words.map(_.toList)
//res42: List[List[Char]] = List(List(t, h, e), List(q, u, i, c, k), List(b, r, o, w, n), List(f, o, x))
words.flatMap(_.toList)
//res43: List[Char] = List(t, h, e, q, u, i, c, k, b, r, o, w, n, f, o, x)