本文主要介绍spark中常用的算子的作用记忆部分示例总结。
从总体上来分,spark算子可以分为两大类:transformation和action,其中transformation触发会记录元数据信息,延迟执行,只有触发action才会真正的执行计算。
从小方向上来讲,spark算子可以分为三种类型:value类型transformation算子,key-value类型transformation算子以及action算子。what is RDD?
Internally, each RDD is characterized by five main properties:
接下来介绍常用的一些spark算子。
transformation算子
value类型transformation算子
map算子
map算子将原来RDD中的每一个数据通过map中的用户自定义方法f映射转变成新的元素。1
2
3
4
5
6
7
8scala> val rdd1 = sc.parallelize(List(1, 2, 3))
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at :24
scala> val rdd2 = rdd1.map(_*10)
rdd2: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[1] at map at :26
scala> rdd2.collect()
res0: Array[Int] = Array(10, 20, 30)
flatMap算子
flatMap将RDD中的每一个元素通过函数f转成新的元素,并将RDD的每个集合中的元素合并成一个集合。1
2
3
4
5scala> val rdd1 = sc.parallelize(Array("a b c", "d e f", "h i j"))
rdd1: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[8] at parallelize at :24
scala> val rdd2 = rdd1.flatMap(_.split(' ')).collect
rdd2: Array[String] = Array(a, b, c, d, e, f, h, i, j)
mapPartitions算子
与map类似,但是在RDD的每个分区(块)上分别运行,所以当在T类型的RDD上运行时,func的类型必须是Iterator=> Iterator 。
glom 算子
glom将每个分区形成一个数组,内部实现返回ClommedRDD
union算子
使用union函数要保证两个RDD元素的数据类型相同,返回的RDD类型与被合并的RDD数据类型相同&