微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spark总结

1.基础

1.RDD:弹性分布式数据集、不可变分布式对象集合
2.Spark会自动函数发到各个执行器节点上
3.setMaster('local')可以让spark运行在单机单线程上,而无需连接到集群
4.RDD的惰性计算:只有在第一次行动操作中用到时,才会真正计算
5.每次transformation会返回一个新的RDD
6.rdd引用的数据时需要可序列化的(Serializable),不要在rdd操作中引用全局字段,可以使用局部变量

2.RDD

1.创建:
(1)读取集合对象sc.parallelize(list),读取list,set等
(2)读取文本文件sc.textFile("path")
2.转化操作transformation
(1)map 每个元素转化为新的元素,类型可以不一样
(2)flatmap 每个元素转化为新的多个元素,类型可以不一样
(3)filter 过滤掉满足条件的元素
(4)distinct 去除重复元素
(5)sample 采样
(6)union/intersection/subtract 两个rdd的并集/交集/差集
3.行动操作action
(1)reduce 整合所有数据
(2)collect 返回所有元素
(3)count 计数
(4)take(n) 返回n个
(5)top(n) 返回最前面n个
(6)fold(zero)(func) 带初始值
参考https://www.csdn.net/gather_2c/MtTaYg2sMjY3Ny1ibG9n.html
(7)aggregate(zero)(seqOP,combOp)
参考https://blog.51cto.com/gldbhome/2151762?source=dra
(8)countByValue 各元素出现的次数
(9)foreach 对每个元素使用
4.缓存
persist
unpersist
缓存级别MEMORY_ONLY等...在StorageLevels中

3.Pair RDD

1.transformation
(1)reduceByKey 对相同键的数据做reduce操作
(2)groupByKey 分组
(3)combineByKey
(4)mapValues对值map,键不变
(5)flatMapValues 对值flatMap,键不变
(6)keys 键
(7)values 值
(8)sortByKey 根据键排序
2.action
(1)countByKey
(2) collectAsMap
(3)lookup(key) 取值
3.数据分区

4.数据读取与保存

1.读取单个文本文件sc.textFile(""),每一行为rdd的一个元素
2.读取多个文本文件sc.wholeTextFiles("dir"),返回pairRDD,键为文件名,值为文件内容
3.保存为文本文件saveAsTextFile()
4.保存为对象文件saveAsObjectFile(),读取sc.objectFile()
5.从本地文件系统中读取文件时,要求文件在集群中所有节点的相同路径下都可以找到, 如果文件还没有放在集群中的所有节点上,则需要从本地读取该文件,然后让后在调用parallelize将内容分发到工作节点
6.从HDFS读取,可以将Spark和HDFS部署在同一批机器上
7.Spark sql可以读取Hive、JSON等格式化数据
8.可以使用JdbcRDD读取MysqL

5.Spark编程进阶

1.累加器:可以理解为在工作时的一个只写变量
创建 sc.accumulator(initialValue)
增加值acc+=value
访问acc.value
2.广播变量:让程序高效地向所有工作节点发送一个较大的只读值
创建  sc.broadcast(T)
访问 bc.value
变量只会被发送到各节点一次,应作为只读值处理
3.基于分区的操作
共享连接池、分区操作函数
4.与其他语言结合,pipe()
5.数值RDD的统计
rdd.stats()可以获取以下统计数据
count
mean
sum
max
min
variance 方差
stdev 标准差
如果只统计其中一个,可以直接调用...

6.在集群上运行

7.Spark调优与调试

8.Spark sql

9.Spark Streaming

1.使用 val ssc = new StreamingContext(conf,Seconds(1))
Seconds(1)表示批次间隔,指定多长时间处理一次新数据
ssc.start()
ssc.awaitTermination()
2.DStream的转化操作可以分为无状态和有状态两种
无状态:不依赖之前批次的数据
有状态:依赖
有状态的转化操作可以设置窗口时长和滑动步长
如果窗口时长为3个批次,滑动步长为2个批次,则每隔2个批次就对前3个批次的数据进行一次计算
3.输入源
可以是文件流ssc.textFileStream('')
可以是kafka、flume等
4.容错性保障:检查点机制checkpoint

10.MLlib

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐