Spark常用Actions算子


介紹以下Actions算子:
foreach
foreachPatition
reduce
collect
count
first
take
takeSample
top
takeOrdered
saveAsTextFile
saveAsSequenceFile
saveAsObjectFile
countByKey
countByValue
aggregate


(1) foreach、foreachPatition

  • foreach:遍歷RDD中的元素
  • foreachPatition:按照分區(qū)遍歷RDD中的元素
val arr = Array(1,2,3,4,5,6)
val rdd = sc.makeRDD(arr,2)

rdd.foreach(x => {
  println("===========")
  println(x)
})
/*
===========
1
===========
2
===========
3
===========
4
===========
5
===========
6
 */

rdd.foreachPartition(x => {
  println("===========")
  while(x.hasNext) {
    println(x.next())
  }
})
/*
===========
1
2
3
===========
4
5
6
 */

}

(2) reduce:按照指定規(guī)則聚合RDD中的元素

val numArr = Array(1,2,3,4,5)
val rdd = sc.parallelize(numArr)
val sum = rdd.reduce(_+_)
println(sum)
/*
15
*/

(3) collect:計算結(jié)果拉取回Driver端

val numArr = Array((1,1),(1,2),(1,3),(2,1),(2,2),(2,3))
val rdd = sc.parallelize(numArr)
val sum = rdd.reduceByKey(_+_)

sum.collect().foreach(println)
/*
(1,6)
(2,6)
 */

(4) count、countByKey栗菜、countByValue

count:統(tǒng)計RDD中元素個數(shù)
countByKey:統(tǒng)計每個Key中的元素的個數(shù)
countByValue:統(tǒng)計每個value的個數(shù)

// -- count
val arr = Array("Tom","Jack","Tony","Bob","Kate")
val rdd = sc.makeRDD(arr)
println(rdd.count())
/*
5
 */

// -- countByKey
val rdd = sc.parallelize(Array(
        ("銷售部","Tom"), ("銷售部","Jack"),("銷售部","Bob"),("銷售部","Terry"),
        ("后勤部","Jack"),("后勤部","Selina"),("后勤部","Hebe"),
        ("人力部","Ella"),("人力部","Harry"),
        ("開發(fā)部","Allen")
    ))
val result = rdd.countByKey();
result.foreach(println)
/*
(后勤部,3)
(開發(fā)部,1)
(銷售部,4)
(人力部,2)

// -- countByValue
val rdd = sc.parallelize(Array(
      "Tom","Jed","Tom",
      "Tom","Jed","Jed",
      "Tom","Tony","Jed"
    ))
val result = rdd.countByValue();
result.foreach(println)
/*
(Tom,4)
(Tony,1)
(Jed,4)
*/

(5) first镊掖、take渡八、takeSample

take(n):取RDD中前n條數(shù)據(jù)
first:= take(1)
takeSample(withReplacement,num,[seed]):隨機抽取RDD中的元素

withReplacement : 是否是放回式抽樣  
    true代表如果抽中A元素登疗,之后還可以抽取A元素
    false代表如果抽中了A元素,之后都不在抽取A元素  
fraction : 抽樣的比例  
seed : 抽樣算法的隨機數(shù)種子椭迎,不同的數(shù)值代表不同的抽樣規(guī)則彰阴,可以手動設(shè)置瘾敢,默認為long的隨機數(shù)
val arr = Array(("Tom",88),("Bob",92),("Allen",86),("Kate",100),("Sandy",97))
val rdd = sc.makeRDD(arr)

// 排序后去前三個
rdd.sortBy(_._2,false).take(3).foreach(println)
/*
(Kate,100)
(Sandy,97)
(Bob,92)
 */

// 排序后取top1
rdd.sortBy(_._2,false).take(1).foreach(println) // (Kate,100)
println(rdd.sortBy(_._2,false).first()) // (Kate,100)

// 隨機抽取2個元素
rdd.takeSample(false, 2).foreach(println)

(6) top、takeOrdered

top(n):從RDD中尿这,按照默認(降序)或者指定的排序規(guī)則簇抵,返回前n個元素
takeOrdered(n):從RDD中,按照默認(升序)或者指定的排序規(guī)則射众,返回前n個元素

var rdd = sc.makeRDD(Array(10, 4, 2, 12, 3))

rdd.top(3).foreach(println) // 12 10 4(降序取)

rdd.takeOrdered(3).foreach(println) // 2 3 4(升序取)

(7) saveAsTextFile碟摆、saveAsSequenceFile 、saveAsObjectFile

  • saveAsTextFile:把結(jié)果文件保存為textFile
  • saveAsSequenceFile:把結(jié)果文件保存為SequenceFile
  • saveAsObjectFile:把結(jié)果文件保存為ObjectFile
val line = sc.textFile("hdfs://repo:9000/user/spark/wordcount/input/wordcount.txt")
line.flatMap(_.split(" "))
  .map((_,1))
  .reduceByKey(_+_)
  .sortBy(_._2,false)
  // .foreach(t => println(t._1 + " " + t._2))
  .saveAsTextFile("hdfs://repo:9000/user/spark/wordcount/output/")

(8) aggregate 搞清楚原理在再補充吧...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末责球,一起剝皮案震驚了整個濱河市焦履,隨后出現(xiàn)的幾起案子拓劝,更是在濱河造成了極大的恐慌雏逾,老刑警劉巖嘉裤,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異栖博,居然都是意外死亡屑宠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門仇让,熙熙樓的掌柜王于貴愁眉苦臉地迎上來典奉,“玉大人,你說我怎么就攤上這事丧叽∥谰粒” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵踊淳,是天一觀的道長假瞬。 經(jīng)常有香客問我,道長迂尝,這世上最難降的妖魔是什么脱茉? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮垄开,結(jié)果婚禮上琴许,老公的妹妹穿的比我還像新娘。我一直安慰自己溉躲,他們只是感情好榜田,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锻梳,像睡著了一般箭券。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唱蒸,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天邦鲫,我揣著相機與錄音,去河邊找鬼神汹。 笑死庆捺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屁魏。 我是一名探鬼主播滔以,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼氓拼!你這毒婦竟也來了你画?” 一聲冷哼從身側(cè)響起抵碟,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坏匪,沒想到半個月后拟逮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡适滓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年敦迄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凭迹。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡罚屋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗅绸,到底是詐尸還是另有隱情脾猛,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布鱼鸠,位于F島的核電站猛拴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瞧柔。R本人自食惡果不足惜漆弄,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望造锅。 院中可真熱鬧撼唾,春花似錦、人聲如沸哥蔚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糙箍。三九已至渤愁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間深夯,已是汗流浹背抖格。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咕晋,地道東北人雹拄。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像掌呜,于是被迫代替她去往敵國和親滓玖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容