【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热门品类