1.aggregate
def aggregate[U](zeroValue: U)(seqOp: (U, T) ? U, combOp: (U, U) ? U)(implicit arg0: ClassTag[U]): U
aggregate用于聚合 rdd 中的元素聘惦,首先使用sepOP 將rdd 中的元素 T 聚合成 U ,然后使用 comOP 將之前聚合后的U 聚合成U
**特別注意: sepOP 和comOP 都會(huì)使用初值 zeroValue, 且類型為U
def setOP(a:Int ,b:Int): Int ={
println("seqOP: "+ a +"\t"+b)
math.min(a,b)
}
def comOP(a:Int ,b:Int): Int ={
println("comOP: "+ b+ "\t"+a)
a*b
}
def testAggregate(): Unit ={
val z =sc.parallelize( List(1,2,3,4,5,6),2)
println(z.aggregate(3)(setOP ,comOP))
}
結(jié)果分析
- 輸出結(jié)果 7
- 首先 list 分為兩個(gè)分區(qū) 123, 456
- 然后進(jìn)行 setOP 操作
- 第一個(gè)分區(qū): 輸出 3,1 1,2 1,3
- 第二個(gè)分區(qū): 輸出 3,4 3,5 3,6
- 最后進(jìn)行 comOP 操作
- 輸出 3 1
4 3
- 最后的值為: 3+ 1+ 3 =7
2.fold
def fold(zeroValue: T)(op: (T, T) ? T): T
fold是aggregate的簡(jiǎn)化,將aggregate中的seqOp和combOp使用同一個(gè)函數(shù)op婆硬。
def testFold(): Unit ={
val z= sc.parallelize(List(1,2,3,4),2)
println(z.fold(1)(comOP))
}
3.Lookup
用于(K,V) 類型的RDD稚机,制定K 染簇,返回所有對(duì)應(yīng)的V
def testLookup(): Unit ={
val z=sc.makeRDD(Array(("a",1),("a",2),("c",3)))
println(z.lookup("a"))
}
}