Spark学习笔记2
来源:互联网 发布:php 蜘蛛记录 编辑:程序博客网 时间:2024/06/14 17:34
内部:
groupByKey/reduceByKey
-a.groupByKey
combineByKeyWith
底层都是调用到类似
def combineByKeyWithClassTag[C](
//聚合的临时变量,将聚合的数据存放到哪里或者转换成什么格式
//针对每个分区进行,次分区中key第一次出现
createCombiner: V => C,
mergeValue: (C, V) => C,
mergeCombiners: (C, C) => C,
partitioner: Partitioner,
mapSideCombine: Boolean = true,
serializer: Serializer = null)(implicit ct: ClassTag[C]): RDD[(K, C)] = self.withScope {}
aggregateByKey
combineByKey(
createCombiner是 从分区开始对数据进行操作
mergeValue 是 1操作之后 如何进行合并 一般需要添加一些针对数据的操作
mergeCombiners 是在最后聚合时的合并方式
)
对于Top key 问题而言这个就是具体实现 在分区的时候就进行了排序 take操作
例子:
part-01
aa 78
bb 98
aa 80
cc 98
aa 69
cc 87
bb 97
aa: Int -> ListBuffer(78, 80, 69)
bb: Int -> ListBuffer(98, 97)
bb: Int -> ListBuffer(98, 87)
part-02
cc 86
aa 97
bb 78
bb 34
cc 85
bb 92
cc 72
bb 32
bb 23
aa: Int -> ListBuffer(97 )
bb: Int -> ListBuffer(78, 34, 92)
bb: Int -> ListBuffer(86, 85, 72)
装逼必备。。。。。。需要整理!
Spark优化
1.开发的优化 combineByKey
选择合适的RDD API
比如:
-a combineByKey /aggregateByKey
就不是使用groupByKey/reduceByKey
-b foreachPartition 不要使用foreach
结果RDD保存到JDBC/Redis/Hbase中
-c map/ mapPartition
-d 缓存/持久化
某个RDD被使用多次
某个RDD来之不易
2.资源优化
bin/spark-submit
-a Driver
Memory/CPU CORE
-b Excutors
Number/pre-Memory/pre-CPU CORE
-c Shuffle Excutors的内存划分
3.其他
性能提升
内存分配使用
Spark默认使用的是Java的序列化
企业中需要使用另外的方式:
比如 序列化:
conf1.set("spark.serializer","org.apache.spark.serializer.KryoSerializer")
conf1.registerKryoClasses(Array(classOf[ImmutableBytesWritable],classOf[Result]))
需要设置需要系列化的类, Kryo的性能要使用
分区到Driver 就需要序列化操作,shuffle也会产生序列化
所以需要注册到 registerKryoClasses中
因为每次都要使用 所以可以在default文件中直接启用此序列化
================================================================================
SparkSQL
Hive 但是比hive强大
a SQLContext:sqlContext
万事万物皆可读
例如: hive-table textFile json jdbc
parquet/orc tsv/csv (xml MongoDB/redis/hbase) 有人写好了api
https://github.com 上搜spark hbase
b DataFrame/Dataset
将数据写为了这种形式,借鉴了python和R
c
sqlContext.read
.textFile()
.jdbc()
.json()
.parquet()
.orc()
//读来之后就是一个dataframe
//可以使用SQL
sqlContext.sql(".........")
//使用链式
//写数据
dataframe.
SparkCore
Mapreduce
-a SparkContext:sc
sc.textFile("")
SparkSQL 天然支持读取Hive表中的数据
-a 将hive-site.xml文件放入${SPARK_HOME}/conf下
cp ... ....
或者 创建软连接
ln -s path/hive-site.xml sparkhome/conf/
-b 连接数据库
需要驱动包
mysql驱动包需要放入spark application classpath
1.方式一
--jars
说明:
有时候不生效
2. 方式二
设置SPARK_CLASSPATH
在 spark-env.sh中
设置
SPARK CLASS PATH 备注中有
针对hive表中的emp表数据进行分析
-1 SQL
sqlContext.sql("").show
-2 API DSL
阿里天池
阅读全文
0 0
- Spark学习笔记2
- Spark计算Pi---Spark学习笔记2
- Spark学习笔记-GraphX-2
- Spark 2.0.2 学习笔记
- spark学习笔记:Spark Streaming
- Spark学习笔记:初识Spark
- Spark学习笔记--Spark基础知识
- spark学习笔记:初识spark
- spark学习笔记2 spark应用执行机制
- spark学习笔记(2)spark基本概念和术语解释
- Spark简单数据分析---Spark学习笔记(2)
- Spark学习笔记2@spark-env参数说明
- Spark源码学习笔记2-JobProgressListener
- Spark学习笔记2:RDD编程
- Spark学习笔记2:RDD编程
- [2].Spark 学习笔记 使用java ---PageRank
- Spark 学习笔记
- Spark学习笔记
- 172. Factorial Trailing Zeroes
- LeetCode
- unity学习——单例模式
- xlwt写入单元格,xlrd读出单元格
- C#最佳工具集合:IDE、分析、自动化工具等
- Spark学习笔记2
- Loki::CyclicVisitor
- android values适配中 文件夹加载策略解析
- 侧拉菜单
- 使用geotools和jts进行GIS数据生成
- Effective Java中文第二章第2节(个人渣翻)
- 站长总结用过的虚拟主机,VPS,用过服务器,网站管理系统有哪些
- android产品研发与用户需求、体验
- 你的云主机