reduce(f:(T,T)=>T)
1. 作用:通過func函數(shù)聚集RDD中的所有元素康愤,先聚合分區(qū)內(nèi)數(shù)據(jù),再聚合分區(qū)間數(shù)據(jù)
2.創(chuàng)建一個(gè)RDD針對里面的元素進(jìn)行累加計(jì)算獲取結(jié)果
val rdd=sc.makeRDD(1 to 10)
rdd.reduce(_ + _)
count()
1.作用:在驅(qū)動程序中贮匕,以數(shù)組的形式返回?cái)?shù)據(jù)集的所有元素
2. 需求:創(chuàng)建一個(gè)RDD,并將RDD內(nèi)容收集到Driver端打印
val rdd=sc.makeRDD(1 to 10)?
rdd.count()
結(jié)果:
10
first()
1. 作用:返回RDD中的第一個(gè)元素
2.創(chuàng)建一個(gè)RDD,獲取里面的第一個(gè)元素調(diào)用first函數(shù)返回第一個(gè)元祖,底層調(diào)用的就是take()函數(shù)
val rdd2=sc.makeRDD(Arrray(("qiuxiang",1),("tangbohu",3),("huangrong",3)))
rdd2.first()
結(jié)果:
("qiuxiang",1)
take(num: Int)
1. 作用:返回一個(gè)由RDD的前n個(gè)元素組成的數(shù)組,
2.創(chuàng)建一個(gè)RDD,獲取里面的第一個(gè)元素調(diào)用first函數(shù)返回第一個(gè)元祖
val rdd2=sc.makeRDD(Arrray(("qiuxiang",1),("tangbohu",3),("huangrong",3)))
rdd2.take(3)
結(jié)果:
("qiuxiang",1),("tangbohu",3),("huangrong",3
takeOrdered(num:Int)&& top(num:Int)
1. 作用:返回該RDD排序后的前n個(gè)元素組成的數(shù)組,內(nèi)部涉及排序默認(rèn)是升序,top是降序
2.創(chuàng)建一個(gè)RDD,獲取里面的第一個(gè)元素調(diào)用takeOrdered算子
val rdd=sc.makeRDD(Array(1,90,23,10,11,88,23,-1))
rdd.takeOrdered(3)
rdd.top(3)
結(jié)果:
Aarray(-1, 1, 10)
Array(90, 88, 23)
aggregat[U: ClassTag]((zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U))
0.參數(shù)(zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U)
1.作用:aggregate函數(shù)將每個(gè)分區(qū)里面的元素通過seqOp和初始值進(jìn)行聚合(即第一個(gè)參數(shù)的作用),然后用combine函數(shù)將每個(gè)分區(qū)的結(jié)果和初始值(zeroValue)進(jìn)行combine操作守呜。這個(gè)函數(shù)最終返回的類型不需要和RDD中元素類型一致 為了更好的理解這個(gè)這個(gè)算子的作用我們下面進(jìn)行一個(gè)簡單的操作
2.需求:創(chuàng)建一個(gè)RDD指定RDD由Array(num:Int),2個(gè)分區(qū)組成計(jì)算這個(gè)RDD元素的值
val rdd=sc.makeRDD(Array(10,29,90,11,24,10),2)
rdd.aggregate(0)((x:Int,y:Int)=>(x+y),(x:Int,y:Int)=>(x+y))
結(jié)果 :174
上面結(jié)果其實(shí)沒有問題但是如果將初始值改成10的話
rdd.aggregate(10)((x:Int,y:Int)=>(x+y),(x:Int,y:Int)=>(x+y))
結(jié)果:204
204的計(jì)算結(jié)果是是怎么算出來的呢?
我們這里計(jì)算的有兩個(gè)分區(qū)aggregat()算子,是先分區(qū)內(nèi)計(jì)算,再分區(qū)之間計(jì)算,然后再分區(qū)數(shù)計(jì)算
p0? ? (10,20,90)? ?p0分區(qū)內(nèi)的數(shù)據(jù)計(jì)算結(jié)果是10+10+20+90=139
p1? ? ?(11,24,10? )? ?p1分區(qū)內(nèi)的數(shù)據(jù)計(jì)算結(jié)果是: 10+11+24+10=55
p0? ? p1? 兩個(gè)分區(qū) 計(jì)算結(jié)果為:10
最終結(jié)果是:139+55+10=204
fold(zeroValue:T)(op: (T, T) =>T)
1. 作用:折疊操作山憨,aggregate的簡化操作查乒,seqop和combop一樣
2.val rdd=sc.makeRDD(Array(10,29,90,11,24,10),2)
rdd.fold(0)(_+_)
結(jié)果:174
saveAsTextFile(path:String)
1.作用:將數(shù)據(jù)集的元素以textfile的形式保存到HDFS文件系統(tǒng)或者其他支持的文件系統(tǒng),對于每個(gè)元素郁竟,Spark將會調(diào)用toString方法玛迄,將它裝換為文件中的文本
saveAsSequenceFile(path:String)
作用:將數(shù)據(jù)集中的元素以Hadoop sequencefile的格式保存到指定的目錄下,可以使HDFS或者其他Hadoop支持的文件系統(tǒng)
saveAsObjectFile(path:String)
作用:用于將RDD中的元素序列化成對象枪孩,存儲到文件中
countByKey()
1. 作用:針對(K,V)類型的RDD憔晒,返回一個(gè)(K,Int)的map,表示每一個(gè)key對應(yīng)的元素個(gè)數(shù)蔑舞。
2.創(chuàng)建一個(gè)PairRDD拒担,統(tǒng)計(jì)每種key的個(gè)數(shù)
val rdd= sc.makRDD(List((1,3),(1,2),(1,4),(2,3),(3,6),(3,8)),3)
?rdd.countByKey
結(jié)果:Map(3 -> 2, 1 -> 3, 2 -> 1)
foreach[U](f:A =>U)
1. 作用:在數(shù)據(jù)集的每一個(gè)元素上,運(yùn)行函數(shù)func進(jìn)行更新
需求:創(chuàng)建一個(gè)RDD攻询,對每個(gè)元素進(jìn)行打印
val rdd= sc.makRDD(List((1,3),(1,2),(1,4),(2,3),(3,6),(3,8)),3)
rdd.foreach(t=>{print(t._1+"--"+t._2)})
結(jié)果:1--3 1--2 1--4 2--3 3--6 3--8