列举spark的算子,并简述功能

transformation算子

1.map(func):返回一个新的RDD,该RDD由每个输入元素进过func函数转化后组成
scala是没有mapToPair函数的,scala版本只需要map就可以了
2.mapPartition(func):类似于map,但是独立地在RDD的每个分片上运行,因此在类型为T的RD上运行时,func的函数类型必须是iterator[T]=>iterator[U]。假设有N个元素,有M个分区,那么map函数被调用N次,而mapPartition函数被调用M次,一个函数一次处理所有分区。
3.reduceByKey(func):在一个的RDD上面调用,返回一个的RDD,使用给定的reduce函数,将相同key的值聚合到一起,reduce任务的个数可以通过第二个可选参数来设置,
底层基于combineByKeyWithClassTag实现的。
4.aggregateByKey(zeroValue: U, seqFunc: JFunction2[U, V, U], combFunc: JFunction2[U, U, U]):按照key将value进行分组合并,合并时,将每个value和初始值作为seqFunc的参数,进行计算,返回的结果作为新的对,然后再将结果按照key进行合并,最后将每个分组的value传递给combine函数进行计算(先将前两个value进行计算,将返回结果和下一个value传给combine函数,以此类推),将key和结果作为新的输出。seqFunc属于分区内合并,combFunc属于分区间合并。
5.combineByKey(createCombiner: JFunction[V, C],mergeValue: JFunction2[C, V, C],mergeCombiners: JFunction2[C, C, C]):该算子会遍历分区中所有的元素,因此每个元素的键要么还没有遇到,要么就和之前的某个元素的键相同。如果是一个新元素,那么会调用createCombiner来创建那个键对应的累加器的初始值;如果该元素在分区里已经出现过,那么会调用mergeValue方法时该累加器的当前值和这个新的值合并;最后,会调动mergeCombiners方法来合并不同分区之间相同键的累加器的值。

注意:aggregateByKey和combineByKey底层都是用combineByKeyWithClassTag来实现的,aggregateByKey是对combineByKey的封装,简化了操作。尽量使用reduceByKey不用groupByKey,因为reduceByKey会在本地做下聚合,减少网络传输,而groupByKey会把所有数据做shuffle。

action算子

1.count
count()返回RDD中的元素数量。
2.take
从RDD返回n个元素。它试图减少它访问的分区数量,不能使用此方法来控制访问元素的顺序。
3.top
如果RDD中元素有序,那么可以使用top()从RDD中提取前几个元素。
4.reduce
将RDD的两个元素作为输入,然后生成与输入类型相同的输出,如加法运算。
5.collect
将整个RDD内容返回给driver端程序。
6.foreach / foreachPartition
对RDD的每个元素进行操作,常用存储RDD的元素。

问题:
1.aggregate和aggregateByKey的区别
aggregate是action类型的算子,而aggregateByKey是transformation类型的算子

你可能感兴趣的:(列举spark的算子,并简述功能)