基础知识
RDD原理
Spark 基础
Spark 配置
conf 和 sc
开发Spark程序第一件事就是SparkConf对象,这个对象包含应用的一些信息,然后创建SparkContext,SparkContext可以让Spark知道如何访问集群
conf = SparkConf().setAppName("<app name>")
.setMaster("<集群地址>")
sc = SparkContext(conf = conf)
RDD操作
- 转换
将已存在的数据集转换成新的数据集,例如map。转换是惰性的,不会立刻计算结果,仅仅记录转换操作应用的目标数据集,当动作需要一个结果时才计算。 - 动作
数据集计算后返回一个值给驱动程序,例如reduce
// 从protocols文件创建RDD
val distFile = sc.textFile("/etc/protocols")
// Map操作,每行的长度
val lineLengths = distFile.map(s => s.length)
// Reduce操作,获得所有行长度的和,即文件总长度,这里才会执行map运算
val totalLength = lineLengths.reduce((a, b) => a + b)
// 可以将转换后的RDD保存到集群内存中
lineLengths.persist()
函数
//创建一个单例对象MyFunctions
object MyFunctions {
def func1(s: String): Int = {s.split(" ").length}
}
//将函数传入集群运行
val lineLengths = sc.textFile("/etc/protocols").map(MyFunctions.func1)
共享变量
广播变量
广播变量可以在每个机器上缓存一个只读的变量,可以通过sc.broadcast(v)方法创建。广播变量能够更高效的进行数据集的分配。
累加器
// 创建累加器
val accum = sc.accumulator(0, "My Accumulator")
// 对RDD数据集的数值进行累加
sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
// 查看累加器的结果
accum.value