您的位置:首页 > 其它

scala编写wordCount

2017-02-09 00:00 417 查看
val lines = List("hello tom hello jerry", "hello jerry", "hello kitty")

第一种:
lines.flatMap(_.split(" ")).map((_, 1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))

第二种:
lines.flatMap(_.split(" ")).map((_, 1)).groupBy(_._1).map(t=>(t._1, t._2.size)).toList.sortBy(_._2).reverse

分步说明:

1:lines.flatMap(_.split(" "))

------将lines压平处理成单个单词------

结果: res16: List[String] = List(hello, tom, hello, jerry, hello, jerry, hello, kitty)

2:lines.flatMap(_.split(" ")).map((_, 1))

------分解成元组(word,1) -----

结果:res17: List[(String, Int)] = List((hello,1), (tom,1), (hello,1), (jerry,1), (hello,1), (jerry,1), (hello,1), (kitty,1))

3:lines.flatMap(_.split(" ")).map((_, 1)).groupBy(_._1)

------按单词分组 -----

结果:res18: scala.collection.immutable.Map[String,List[(String, Int)]] = Map(tom -> List((tom,1)), kitty -> List((kitty,1)), jerry -> List((jerry,1), (jerry,1)), hello -> List((hello,1), (hello,1), (hello,1), (hello,1)))

4:lines.flatMap(_.split(" ")).map((_, 1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))

------取出map的value值,叠加。。

mapValues(_.foldLeft(0)(_+_._2)) 说明:第一个下划线是List((jerry,1), (jerry,1)) -----

第二个下划线是foldLeft累加后的结果-----

第三个下划线是 (jerry,1) -----

结果: res19: scala.collection.immutable.Map[String,Int] = Map(tom -> 1, kitty -> 1, jerry -> 2, hello -> 4)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息