sortByKey算子:对(K, V)型RDD按key排序,K需实现Ordered接口,可指定升序或降序及分区数。
join算子:连接两个(K, V)和(K, W)型RDD,返回(K, (V, W))型RDD 。
leftOuterJoin算子:类似SQL左外连接,返回(K, (V, Option[W]))型RDD。
cogroup算子:作用于(K, V)和(K, W)型RDD,返回(K, (Iterable[V], Iterable[W]))型RDD。
RDD行动算子:
RDD行动算子,其能触发实际的数据计算操作。1. reduce:用于聚合RDD中的所有元素,先在分区内聚合,再进行分区间聚合。
2. collect:以数组形式返回数据集的所有元素到驱动程序,函数签名 def collect(): Array[T]
3. foreach:分布式遍历RDD中的每个元素并应用指定函数。
4. count:返回RDD中元素的数量,函数签名 def count(): Long 。
5. first:返回RDD中的首个元素,函数签名 def first(): T 。
6. take:返回由RDD前n个元素组成的数组,函数签名 def take(num: Int): Array[T] 。
7. takeOrdered:返回RDD排序后的前n个元素组成的数组,函数签名 def takeOrdered(num: Int)(implicit ord: Ordering[T]): Array[T] 。
8. aggregate:先利用初始值聚合分区内数据,再聚合分区间数据。函数签名 def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U
9. fold:是 aggregate 的简化版本,进行折叠操作。函数签名 def fold(zeroValue: T)(op: (T, T) => T): T 。
10. countByKey:统计RDD中每种key出现的次数,返回 Map[K, Long] ,函数签名 def countByKey(): Map[K, Long] 。
11. save相关算子:包括 saveAsTextFile (保存为文本文件)、 saveAsObjectFile (保存为序列化对象文件)、 saveAsSequenceFile (了解即可) ,用于将RDD数据保存为不同格式文件。
累加器:
实现原理:累加器用于将Executor端变量信息聚合到Driver端。Driver程序定义的变量在Executor端的每个Task都有副本,Task更新副本值后回传Driver端进行合并。
自定义累加器实现wordcount:创建继承 AccumulatorV2 的自定义累加器类 WordCountAccumulator ,重写相关方法实现单词计数逻辑,在Driver端注册并使用该累加器统计RDD中的单词数量。
广播变量
实现原理:广播变量用于高效分发较大的只读对象,向所有工作节点发送该对象,供一个或多个Spark操作使用,避免为每个任务重复发送。