scala 編寫wordCount


加載文件
 
scala> var f1=sc.textFile("/tmp/dataTest/followers.txt")
scala> f1.flatMap(x=>x.split("-")).map((_,1)).collect //每個數字以'-'分割,並數字為key,給每個key賦值1
res10: Array[(String, Int)] = Array((2,1), (1,1), (4,1), (1,1), (1,1), (2,1), (6,1), (3,1), (7,1), (3,1), (7,1), (6,1), (6,1), (7,1), (3,1), (7,1))

 

reduceByKey(_+_).collect 將key相同元素合並(4出現一次,7出現4次,6出現3次,2出現2次,3出現3次,1出現3次)
scala> f1.flatMap(x=>x.split("-")).map((_,1)).reduceByKey(_+_).collect
res12: Array[(String, Int)] = Array((4,1), (7,4), (6,3), (2,2), (3,3), (1,3))
 
這個方法也是同樣效果
scala> f1.flatMap(x=>x.split("-")).map((_,1)).reduceByKey((x,y)=>x+y).collect
res18: Array[(String, Int)] = Array((4,1), (7,4), (6,3), (2,2), (3,3), (1,3))
 
 
對出現的次數進行排序
sortByKey
scala> var resText=f1.flatMap(x=>x.split("-")).map((_,1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))
resText: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[39] at map at <console>:26
對出現的次數進行排序,所以要先將元素的第二個元組和第一個元組互換位置 map(x=>(x._2,x._1)),這樣出現的次數就成了key,然后再對key進行排序sortByKey(false)
再對排序后的結果,再一次的對他們的元組進行互換位置(次數,單詞)換后(單詞,次數) map(x=>(x._2,x._1))
互換位置也可以使用下面方式,
  1. map{case (x._1, x._2) => (x._2, x._1)}.sortByKey(false)
 
false:從大到小 降序
true:小小到大 升序
 
 
將結果保存到hdfs
scala> resText.saveAsTextFile("/tmp/out/res")
 查看結果
[root@node4 node4]# hdfs dfs -cat /tmp/out/res/part-00000
(7,4)
(6,3)
(3,3)
(1,3)
(2,2)
(4,1)
[root@node4 node4]#

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM