Spark-core:Spark RDD的高级算子
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark-core:Spark RDD的高级算子相关的知识,希望对你有一定的参考价值。
参考技术A把每个partition中的分区号和对应的值拿出来
(1)参数说明:
(2)通过这两个参数,可以定义处理分区的函数。
Iterator[U] : 操作完成后,返回的结果。
(3)示例:将每个分区中的元素和分区号打印出来。
(a)
(b)创建一个函数返回RDD中的每个分区号和元素:
(c)调用:
含义 :先对局部聚合,再对全局聚合
举例 :
(1)第一个例子:
(a)需求:将每个分区中的最大值求和,注意:初始值是0;
(b)需求:如果是求和,注意:初始值是0:
(2)第二个例子:一个字符串的例子:
运行结果:
(3)例三:更复杂一点的例子
程序执行分析:
结果可能是:”24”,也可能是:”42”
(4)例四:
程序执行分析:
结果是:”10”,也可能是”01”,
原因:注意有个初始值””,其长度0,然后0.toString变成字符串
(5)例5:
结果是:”11”,原因同上
程序执行分析:
(1)准备数据:
(2)两个分区中的元素:
(3) 示例:
(a)将每个分区中的动物最多的个数求和
(b)将每种动物个数求和
(c)这个例子也可以使用:reduceByKey
与reduceByKey相比,aggregateByKey 效率更高
(1)都是将RDD中的分区进行重分区。
(2)区别是:coalesce默认不会进行shuffle(false);而repartition会进行shuffle(true),即:会将数据真正通过网络进行重分区。
(3)示例:
下面两句话是等价的:
参考: http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html
Spark-core算子
文章目录
Transformation算子
1.map : 一一映射
处理rdd里面每一个元素
2.filter
map相关的算子、kv类型的算子、other算子
3.map相关的算子
makeRDD =>了解 =》 parallelize
map vs mapPartitions:
1.map 一个作用的rdd里面每一个元素
2.mapPartitions 作用的rdd里面 分区
需求: spark-core:
map filter =》 不让用 如何实现 功能? 平台
MapPartitionsRDD
4.mapPartitionsWithIndex
可以查看 rdd里面每个分区对应的数据
注意:
元素是如何分区,先不用管 【partitioner mr】
5.mapvalues
针对kv类型对v做处理
6.flatMap
一一映射
flatmap = flatten + map
flatten => 压扁的
补充:
flatMap =》 更改原始数据结构的
map 不会改变
other算子
1.glom : 把每一个分区的数据形成一个数组 比mapPartitionsWithIndex
2.sample 抽样
3.union : 简单数据合并 不去重 sql : union union all
4.intersection 交集
5.subtract 差集:出现在a里面的元素的 没有出现在b里面的 叫差集
6.distinct 去重 ***
默认采用分区器: hash
kv类型算子
1.groupByKey 按key进行分组 不要使用 效率低 不灵活
mapSideCombine = false 没有开启的 发送数据 网络io 没有变化的
2.reduceByKey
mapSideCombine = true + func
distinct 底层:
map + reduceByKey + map 只对key进行去重
需求:
disctint =》 不使用distinct 完成数据去重?
底层
spark-core:
1.disctint =》 不使用distinct 完成数据去重?
底层实现
3.groupby 自定义分组 灵活
4.sortByKey =》 按照key进行排序
分区排序 =》 hive sort by
全局排序 =》 前提 rdd分区数 1个
5.sortby 自定义排序 灵活
rdd方式进行数据分析,一定要清楚 rdd里面的数据结构 【rdd进行数据开发 不太方便】 sql
mr
6.join vs cogroup 【了解】
1. 根据 key进行关联
2. join返回值类型:
RDD[(K, (option[V], option[W]))]
Action算子
1.collect()
2.foreach() => 输出 driver
1.控制台
2.hdfs 不这样用
3.db
3.foreachpartition 调优点
input =》 todo =》 db mysql
获取mysql连接
4.reduce =》 mapreduce reduce
5.first() vs take
first 底层调用 task算子
6.top vs takeOrdered
hive topn
top 降序 获取前n个数据集
takeOrdered 升序获取前n个数据集
7.countByKey()
常用:
foreach()
foreachpartition
总结:
转换算子常用的:
map、flatmap、filter、mapparitions、distinct、
groupby、sortby、reducebykey、mapvalues
Action算子常用的:
foreach()
foreachpartition
以上是关于Spark-core:Spark RDD的高级算子的主要内容,如果未能解决你的问题,请参考以下文章