用scala实现wordcount

来源:互联网 发布:mac战网修改地区 编辑:程序博客网 时间:2024/05/29 02:18

这个算法来源于QQ群里一位叫醉清风的网友,对于怎么读取文件生成votes这个序列这里就不写了,主要是介绍count思路,使用groupBy函数聚集,然后使用两个map获得需要的统计量。

object wordCountByScala extends App {  val votes = Seq(("scala", 1), ("java", 4), ("scala", 10), ("scala", 1), ("python", 10))                                                  //> votes  : Seq[(String, Int)] = List((scala,1), (java,4), (scala,10), (scala,1                                                  //| ), (python,10))  //使用模式匹配聚集key相同的元素  val votesByLang = votes groupBy {case (lang, _) => lang }                                                  //> votesByLang  : scala.collection.immutable.Map[String,Seq[(String, Int)]] = M                                                  //| ap(scala -> List((scala,1), (scala,10), (scala,1)), java -> List((java,4)),                                                   //| python -> List((python,10)))   val sumByLang = votesByLang map { case (lang, counts) =>     //对每一个Map元素分别提取后面的数值,并用sum计算总和   val countsOnly = counts map { case (_, count) => count }   (lang, countsOnly.sum) }                                                //> sumByLang  : scala.collection.immutable.Map[String,Int] = Map(scala -> 12, j                                                  //| ava -> 4, python -> 10)  }


 

0 0
原创粉丝点击