build.sbt:
MasterActor:
MapActor:
ReduceActor:
AggregateActor :
入口:
SBT运行结果:
点击(此处)折叠或打开
- name := "HelloAkkaWithSBT"
-
- version := "1.0"
-
- scalaVersion := "2.9.2"
-
- resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases"
-
- libraryDependencies += "com.typesafe.akka" % "akka-actor" % "2.0.3"
MasterActor:
点击(此处)折叠或打开
- class MasterActor extends Actor{
- val aggregateActor : ActorRef = context.actorOf(Props[AggregateActor], name = "aggregate")
- val reduceActor : ActorRef = context.actorOf(Props(new ReduceActor(aggregateActor)), name = "reduce")
- val mapActor : ActorRef = context.actorOf(Props(new MapActor(reduceActor)), "map")
-
- override protected def receive: Receive = {
- case message : String =>
- mapActor ! message
- case message : Result =>
- aggregateActor ! message
- case _ =>
-
- }
- }
MapActor:
点击(此处)折叠或打开
- class MapActor(reduceActor: ActorRef) extends Actor{
- val STOP_WORDS_LIST = List("a", "is")
-
- override protected def receive: Receive = {
- case message : String =>
- reduceActor ! map(message)
- case _ =>
- }
-
- def map(line : String): MapData = {
- val dataList = new util.ArrayList[Word]
- val parser : StringTokenizer = new StringTokenizer(line)
- val defaultCount : Integer = 1;
- while(parser.hasMoreTokens){
- val word : String = parser.nextToken().toLowerCase()
-
- if(!STOP_WORDS_LIST.contains(word)){
- dataList.add(new Word(word, defaultCount))
- }
- }
-
- return new MapData(dataList)
- }
- }
ReduceActor:
点击(此处)折叠或打开
- class ReduceActor(aggregateActor : ActorRef) extends Actor{
-
- override protected def receive: Receive = {
- case message : MapData =>
- aggregateActor ! reduce(message.dataList)
- case _ =>
- }
-
- def reduce(dataList: util.ArrayList[Word]): ReduceData = {
- val reduceMap = new util.HashMap[String, Integer]
- if(!dataList.isEmpty()){
- for(wc : Word <- dataList){
- val word = wc.word
- if(reduceMap.containsKey(word)){
- reduceMap.put(word, reduceMap.get(word) + 1)
- }else{
- reduceMap.put(word, 1)
- }
- }
- }
-
- return new ReduceData(reduceMap)
- }
- }
AggregateActor :
点击(此处)折叠或打开
- class AggregateActor extends Actor{
- val finalReduceMap = new util.HashMap[String, Integer]
-
- override protected def receive: Receive = {
- case message : ReduceData =>
- aggregate(message.reduceMap)
- case message : Result =>
- println(finalReduceMap.toString)
- }
-
- def aggregate(reduceMap: util.HashMap[String, Integer]): Unit = {
- var count : Integer = 0
- for(key : String <- reduceMap.keySet()){
- if(finalReduceMap.containsKey(key)){
- count = reduceMap.get(key)
- count += finalReduceMap.get(key)
- finalReduceMap.put(key, count)
- }else{
- finalReduceMap.put(key, reduceMap.get(key))
- }
- }
- }
- }
入口:
点击(此处)折叠或打开
- object MapReduceApplication {
- def main (args: Array[String]){
- val _system = ActorSystem("HelloAkka")
- val master = _system.actorOf(Props[MasterActor], name = "master")
-
- master ! "Hi! My name is Rocky. I'm so so so happy to be here."
- master ! "Today, I'm going to read a news article for you."
- master ! "I hope I hope you'll like it."
-
- Thread.sleep(500)
- master ! new Result
-
- Thread.sleep(500);
- _system.shutdown()
- }
- }
SBT运行结果:
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28912557/viewspace-2093556/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28912557/viewspace-2093556/