Scala写WordCount,查看本地的前20条数据,并统计出现的次数,并且是多线程

import scala.actors.{Actor, Future}
import scala.collection.mutable
import scala.io.Source

case class ST(fName:String)
case class RT(re:Map[String,Int])

class Awc extends Actor{
override def act(): Unit = {
loop({
react({
case ST(fName) => {
val lines = Source.fromFile(fName).mkString
val map = lines.split("\t\n").flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.size)
sender ! RT(map)
}
})
})
}
}

object WordCount {

def main(args: Array[String]): Unit = {
val arr = Array("E:\\a.txt","E:\\b.txt")
val f = new mutable.ListBuffer[Future[Any]]
for (fname <- arr){
val awc = new Awc
awc.start()
f += awc !! ST(fname)
}

val t = new mutable.ListBuffer[RT]

while (f.size > 0){
for (fu <- f){
if (fu.isSet){
val ft = fu.apply()
val rt = ft.asInstanceOf[RT]
t += rt
f -= fu
}
}
}
t.flatMap(_.re).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2)).toList.sortBy(_._2).reverse.take(20).foreach(println(_))
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值