scala akka wordcount程序
来源:互联网 发布:达内大数据课程怎么样 编辑:程序博客网 时间:2024/06/02 19:41
Message.scala:
package com.hupu.dace.messagessealed case class Result()sealed case class WordCount(word: String, count: Int)sealed case class MapData(data: List[WordCount])sealed case class ReduceData(data: List[WordCount])
MasterActor:
package com.hupu.dace.actorsimport akka.actor.{Actor, Props}import com.hupu.dace.messages.Result/** * Created by xiaojun on 2015/10/12. */class MasterActor extends Actor { val aggregateActor = context.actorOf(Props[AggregateActor], name = "agg") val reduceActor = context.actorOf(Props(classOf[ReduceActor], aggregateActor), name = "reduce") val mapActor = context.actorOf(Props(classOf[MapActor], reduceActor), name = "map") override def receive: Receive = { case msg: String => mapActor ! msg case Result() => aggregateActor ! Result() case _ => }}
package com.hupu.dace.actorsimport java.util.StringTokenizerimport akka.actor.{Actor, ActorRef}import com.hupu.dace.messages.{MapData, WordCount}import scala.collection.mutable.ArrayBuffer/** * Created by xiaojun on 2015/10/12. */class MapActor(reduceActor: ActorRef) extends Actor { override def receive: Receive = { case msg: String => val mapData = getMapData(msg) reduceActor ! mapData case msg => unhandled(msg) } private def getMapData(msg: String): MapData = { val list = ArrayBuffer[WordCount]() val tokenizer: StringTokenizer = new StringTokenizer(msg) while (tokenizer.hasMoreTokens) { val word: String = tokenizer.nextToken.toLowerCase list += WordCount(word, 1) } MapData(list.toList) }}
ReduceActor:
package com.hupu.dace.actorsimport akka.actor.{Actor, ActorRef}import com.hupu.dace.messages.{MapData, ReduceData, WordCount}/** * Created by xiaojun on 2015/10/12. */class ReduceActor(aggregateActor: ActorRef) extends Actor { override def receive: Receive = { case MapData(data) => val list = data.groupBy(_.word).map { case (word, list) => WordCount(word, list.foldLeft(0)((count, wc) => count + wc.count)) }.toList aggregateActor ! ReduceData(list) case msg => unhandled(msg) }}
AggregateActor:
package com.hupu.dace.actorsimport akka.actor.Actorimport com.hupu.dace.messages.{Result, ReduceData}import scala.collection.mutable/** * Created by xiaojun on 2015/10/12. */class AggregateActor extends Actor { val finalData = mutable.HashMap[String, Int]() override def receive: Receive = { case ReduceData(data) => data.foreach(wc => { finalData.put(wc.word, finalData.getOrElse(wc.word, 0) + wc.count) }) case Result() => println(finalData) case msg => unhandled(msg) }}
package com.hupu.daceimport akka.actor.{ActorSystem, Props}import com.hupu.dace.actors.MasterActorimport com.hupu.dace.messages.Result/** * Created by xiaojun on 2015/10/10. */object HelloAkka { def main(args: Array[String]) { val _system = ActorSystem("HelloAkka") val master = _system.actorOf(Props[MasterActor],"master") master ! "hello world hadoop" master ! "hello hadoop" master ! " hello spark world" Thread.sleep(1000) master ! Result() Thread.sleep(1000) _system.shutdown() }}
ReduceActor做本地聚合类似HADOOP wordcount的combiner,然后全部发送给AggregateActor做全局聚合获得最终结果。
0 0
- scala akka wordcount程序
- 编写Akka程序实现WordCount功能
- Scala - Akka
- scala本地wordcount的程序编写
- scala-eclipse 编写spark简单程序 WordCount
- scala wordcount
- scala wordcount
- scala-wordcount
- Scala WordCount
- Scala Akka akka-java-spring
- Spark核心编程:使用Java和Scala开发wordcount程序
- 基于HDFS的spark分布式Scala wordcount程序测试
- 第一个spark scala程序——wordcount
- maven构建Scala程序,实现spark的wordcount
- Intellij Idea 分别用Java和scala 实现wordcount程序
- scala分布式框架-akka
- Scala Akka库学习
- Akka Documentation(Scala) Introduction
- 第四周【项目6-1 - 多项式求和】 数据结构实践——链表:
- B-tree/B+tree/B*tree
- OVS:网络环路 广播风暴解决方案
- linux shell脚本游戏之推箱子
- UISearchController
- scala akka wordcount程序
- 第六周项目五-后缀表达式
- 在Bilibili/ijkplayer,里面增加librtmp。
- solr系列教程:第二节 新建core
- [leetcode]Combination Sum II
- (第四周项目5)猴子选大王
- POJ 1007 DNA Sorting
- Hadoop学习笔记———《MultipleOutputs———将结果输出到指定的多个文件或文件夹》
- 【C++】利用析构统计函数运行时间