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的高级算子的主要内容,如果未能解决你的问题,请参考以下文章

Spark-Core RDD转换算子-Value型

Spark-Core RDD转换算子-双Value型交互

Spark-core算子

Spark从入门到精通18:RDD常用高级算子介绍

Spark-Core RDD中数据共享

初见spark-04(高级算子)