scala topN排序

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)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。