【Spark】Day02:Spark-Core:RDD、编程、数据读取保存、累加器、广播变量、top10
总结:
一、RDD概述
1、引入:IO流
按行、按字节、字节缓冲
调用read方法读取流,均为惰性加载
2、RDD介绍
RDD:弹性分布数据集
3、特性
分区、分区计算逻辑、依赖关系
二、RDD编程
1、编程模型
wordcount
2、RDD的创建
Live Templates设置idea快捷键
//1.创建SparkConf并设置App名称 val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]") //2.创建SparkContext,该对象是提交Spark App的入口 val sc: SparkContext = new SparkContext(conf) //4.关闭连接 sc.stop()
三种方式:从集合中创建RDD、从外部存储创建RDD、从其他RDD创建
集合中创建:parallelize和makeRDD
外部存储系统的数据集创建:textFile
其他RDD创建:
3、分区规则
从集合中创建:sc.makeRDD(Array(1, 2, 3, 4), 3)
从文件中读取后创建:val rdd: RDD[String] = sc.textFile("input/3.txt",3)
4、Transformation转换算子
RDD分为:Value类型、双Value类型和Key-Value类型
Value类型:map映射、mapPartitions()以分区为单位执行、mapPartitionsWithIndex()带分区号、flatMap()压平、
glom()分区转换数组、groupBy()分组、filter()过滤、sample()采样、distinct()去重、coalesce()重新分区(可选是否使用shuffle)、
repartition()重新分区(使用shuffle)、sortBy()排序、pipe()调用脚本
双Value类型交互:union()并集、subtract ()差集、intersection()交集、partitionBy()按照K重新分区、reduceByKey()按照K聚合V、
groupByKey()按照K重新分组、aggregateByKey()按照K处理分区内和分区间逻辑、foldByKey()分区内和分区间相同的aggregateByKey()、
combineByKey()转换结构后分区内和分区间操作、reduceByKey、aggregateByKey、foldByKey、combineByKey、sortByKey()按照K进行排序、
mapValues()只对V进行操作、join()连接、cogroup() 类似全连接
案例实操(广告点击Top3)
5、Action行动算子
reduce
collect
count
first
take:返回前n个
takeOrdered
aggregate
fold
countByKey
save:saveAsTextFile、saveAsSequenceFile、saveAsObjectFile
foreach
6、RDD序列化
闭包检查
Kryo序列化框架
7、RDD依赖关系
查看血缘关系
查看依赖关系:fileRDD.dependencies
窄依赖
宽依赖
8、RDD持久化
RDD Cache缓存
RDD CheckPoint检查点
三、数据读取与保存
1、文件类数据读取与保存
2、文件系统类数据读取与保存
四、累加器
1、系统累加器
2、自定义累加器
五、广播变量
向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用
六、SparkCore项目实战-Top10热门品类