语法
val newRdd = oldRdd.foldByKey(zeroValue: V)(func: (V, V) => V): RDD[(K, V)]
zeroValue:给每一个分区中的每一个key一个初始值;
func:聚合函数。
源码
def foldByKey(zeroValue : V)(func : scala.Function2[V, V, V]) : org.apache.spark.rdd.RDD[scala.Tuple2[K, V]] = { /* compiled code */ }
作用
aggregateByKey的简化操作
例子
package com.day1
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object oper {
def main(args: Array[String]): Unit = {
val config:SparkConf = new SparkConf().setMaster("local[*]").setAppName("wordCount")
// 创建上下文对象
val sc = new SparkContext(config)
// foldByKey算子
val arrayRdd = sc.makeRDD(Array(("张三",1),("李四",2),("王五",3),("刘六",4),("张三",5),("李四",6),("张三",7),("刘六",8)),2)
val foldRdd = arrayRdd.foldByKey(0)(_+_)
foldRdd.collect().foreach(println)
}
}
输入
("张三",1) ("李四",2) ("王五",3) ("刘六",4)
("张三",5) ("李四",6) ("张三",7) ("刘六",8)
输出
(张三,13)
(刘六,12)
(李四,8)
(王五,3)