import scala.io.Source
/usr/local/src/data/The_man_of_property.txt
val lines = Source.fromFile("/usr/local/src/data/Tproperty.txt").getLines().toList
lines.flatMap(_.split(" ")).map((_,1))
---
map((_,1)) 等价于 map(x=>(x,1))
-------
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1)
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.size))
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.length))
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.map(_._2).sum))
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.map(_._2).reduce(_+_)))
因为x._2是一个list,所以对里面的求和,就是数组的一个求和
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(x=>x._2.map)
--把结果放到list中
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.size)).toList
--排序,从小到大
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.size)).toList.sortBy(_._2)
--排序,从大到小
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.size)).toList.sortBy(_._2).reverse
--排好序后,取topN
top 10:
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(x=>(x._1,x._2.size)).toList.sortBy(_._2).reverse.slice(0,5)
==========================
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.size)
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.map(_._2))
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.map(_._2).sum)
--由map形式转换为array形式
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.size).toArray
--排序
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.size).toArray.sortWith(_._2>_._2)
sortBy(_._2).reverse 等价 sortWith(_._2>_._2)
--切片,取TOP 10
lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.size).toArray.sortWith(_._2>_._2).slice(0,10)
--去掉标点符号,只取数字和字符
val p = "[0-9][a-z][A-Z]+".r
lines.flatMap(_.split(" ")).map(x=>(p.findAllIn(x).mkString(""),1)).groupBy(_._1).mapValues(_.size).toArray.sortWith(_._2>_._2).slice(0,10)