1. spark的贡献:
a) RDD 分布在各个节点上,并且可以并行运行;
b) 共享变量可以并行使用,如果spark在多个节点上并行运行某个函数,那么spark会把函数使用到的变量复制到每个节点上。spark支持两种贡献变量:i) 广播变量:将一个只读变量缓存到集群的每个节点上;ii) 累加变量:只允许add操作,用于计数求和
2. 使用spark之前,要先import两个类:
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
a.
SparkContext制定spark如何连接集群
b. SparkConf包含一些程序的设置信息
c. 在建立 SparkContext对象之前,要先建立SparkConf对象
d. 一个程序只能有一个SparkContext对象
val conf = new SparkConf().setAppName(appName).setMaster(master)
new SparkContext(conf)
a. appName是这个程序的名字
b. master
3. RDD支持两种操作
a. transformations 从一个已有的RDD生成一个新的RDD
i) map 对RDD内的每一个元素进行操作,返回一个新的RDD
ii) transformation操作都是lazy模式,他们并不立马执行transformation操作,而是先记录对数据集的一系列操作。在执行一个需要执行的action操作时,才执行该数据集上所有的transformation操作,然后返回结果。这使得spark允许更加高效,例如,对一个数据集map操作之后使用reduce只返回结果,而不返回庞大的map运算的结果集。
b. actions 把RDD扔进一个function,返回一个值
i) reduce 对RDD的所有元素按指定的函数进行聚合,返回最终结果
ii) 默认情况下,每个转换的RDD在执行action操作时都会重新计算,即使两个action操作使用同一个转换的RDD,该RDD也会重新计算。可使用persist方法将RDD缓存到内存。
val lines = sc.textFile("data.txt")
val lineLengths = lines.map(s => s.length)
val totalLength = lineLengths.reduce((a, b) => a + b)