一、算子概述
- 什么是算子
从狭义上来说是指一个函数空间到另一个函数空间(或它自身)的映射,广义上来说是指一个空间到另一个空间的映射。通俗点来说就是指事物(数据或函数)从一个状态到另一个状态过程的抽象
实质就是映射,就是关系,就是变换。 - 算子的重要作用
1、算子越少灵活性就越低,则实现相同功能的编程复杂度越高,算子越多反之
2、算子越少,表现力越差,面对复杂场景则易用性较差,算子越多的则反之 - MapRreduce与Spark算子比较
MapReduce只有2个算子,Map和Reduce,绝大多数应用场景下,均需要复杂编码才能达到用户需求
Spark有80多个算子,进行充分的组合应用后,能满足绝大多数的应用场景
二、Spark算子介绍与应用
1、算子分类
1.1、转换算子
此种算子不触发提交作业,只有作业被提交后才会真正启动转换计算。
-
Value型转换算子:其处理的数据项是Value型
输入分区与输出分区一对一型:map算子、flatMap算子、mapPartitions算子、glom算子
输入分区与输出分区多对一型:union算子、cartesian算子
输入分区与输出分区多对多型:groupBy算子
输出分区为输入分区子集型:filter算子、distinct算子、subtract算子、sample算子、takeSample算子
Cache型:cache算子、persist算子 -
Key-Value型转换算子:其处理的数据是Key-Value型
输入分区与输出分区一对一:mapValues算子
对单个RDD聚集:combineByKey算子、reduceByKey算子、partitionBy算子
对两个RDD聚集:cogroup算子
连接:join算子、leftOutJoin算子、rightOutJoin算子
1.2、行动算子
此算子会触发SparkContext提交作业
- 无输出(是指不输出hdfs、本地文件当中):foreach算子
- HDFS:saveAsTextFile算子、saveAsObjectFile算子
- Scala集合和数据类型:collect算子、collectAsMap算子、reduceByKeyLocally算子、lookup算子、count算子、top算子、reduce算子、fold算子、aggregate算子
2、常用算子分析与应用
2.1、Value型转换算子
-
1)map