scala 编写wordCount

Posted 薛定谔的猫!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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")
 查看结果
[[email protected] node4]# hdfs dfs -cat /tmp/out/res/part-00000
(7,4)
(6,3)
(3,3)
(1,3)
(2,2)
(4,1)
[[email protected] node4]#

 

 

以上是关于scala 编写wordCount的主要内容,如果未能解决你的问题,请参考以下文章

使用Scala语言调用Flink框架进行WordCount词频统计测试不同Parallelism并行度对运算速度的影响

使用Scala语言调用Flink框架进行WordCount词频统计测试不同Parallelism并行度对运算速度的影响

FlinkFlink基础之WordCount实例(Java与Scala版本)

Scala实现文本的WordCount

spark-scala-java实现wordcount

Akka实现WordCount(Scala)