import scala.actors.{Future, Actor} import scala.collection.mutable import scala.collection.mutable.ArrayBuffer import scala.io.Source /** * Created by Administrator on 2017/7/30. */ class MyTask extends Actor{ def act(): Unit ={ loop{ react{ case SubmitTask(fileName) =>{ val result = Source.fromFile(fileName).getLines().flatMap(_.split(" ")).map((_,1)).toList.groupBy(_._1).mapValues(_.size) sender ! ResultTask(result) } case StopTask =>{ exit() } } } } } case class SubmitTask(fileName:String) case class ResultTask(result:Map[String,Int]) case object StopTask object ActorWordCount extends App{ val replySet = new mutable.HashSet[Future[Any]]() val resultList = new ArrayBuffer[ResultTask]() val files = Array[String]("E:\\hadoopSoftWare\\data\\wordCnt.txt","E:\\hadoopSoftWare\\data\\wordCount.txt") for(file <- files){ val task = new MyTask val reply = task.start()!!SubmitTask(file) replySet += reply } while(replySet.size>0){ val toCompute = replySet.filter(_.isSet) for(r <- toCompute){ val result = r.apply().asInstanceOf[ResultTask] //r.apply或者r()取出返回值Future中所谓any的值 resultList += result replySet -= r } } val value = resultList.toList.flatMap(_.result).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2)); println(value) }
Spark--Scala Actor统计多文件WordCount
最新推荐文章于 2022-07-07 11:39:33 发布