博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala Wordcount
阅读量:6700 次
发布时间:2019-06-25

本文共 3210 字,大约阅读时间需要 10 分钟。

 
package my.bigdata.scala08 import scala.collection.mutable import scala.collection.mutable.ArrayBuffer import scala.io.Source /** scala word count   * Created by lq on 2017/8/7.   */ object Task2 {
/** * basic 核心是外部变量 + map.getOrElse */ def scalaWC0(): Unit ={
val in = new java.util.Scanner(new java.io.File("myfile.txt")) //var tt = null; val words = new ArrayBuffer[String] while(in.hasNext()) {
words ++= in.next().split("\\s+") } var map = Map[String,Int]() for(key <- words) {
map +=(key -> (map.getOrElse(key, 0)+1)) println((key -> (map.getOrElse(key, 0)+1))) // } print(map) } /** * basic 核心是外部变量 + map.getOrElse */ def scalaWC1(): Unit ={
val lines = Source.fromFile("myfile.txt").getLines(); val resMap = new mutable.HashMap[String,Long]() //lines.map(line=>{line.split("\\s+")}). for(line <- lines){
val fields = line.split("\\s+") for(f <- fields){
val v = resMap.getOrElse(f,0L); resMap.put(f,v+1L) } } resMap.foreach(println(_)) } /** * 利用遍历+外部变量map实现 */ def scalaWC5(): Unit = {
val lines = Source.fromFile("myfile.txt").getLines(); val resMap = new mutable.HashMap[String, Long]() val res = lines.flatMap(_.split("\\s+")).map(t=>{resMap+=((t,resMap.getOrElse(t,0L)+1L))}) println(resMap) } /** * 利用遍历+外部变量map实现 */ def scalaWC4(): Unit = {
val lines = Source.fromFile("myfile.txt").getLines(); val resMap = new mutable.HashMap[String, Long]() val res = lines.flatMap(line => {
line.split("\\s+")}).foldLeft(resMap)((x,y:String)=>{
resMap+=((y,resMap.getOrElse(y,0L)+1L)) }) println(resMap) } /** * advance 没有用到外部变量, foldLeft 传入一个map,然后传入一个偏函数,偏函数结合遍历的数据处理map返回一个map,最后整个函数返回一个map */ def scalaWC41(): Unit = {
val lines = Source.fromFile("myfile.txt").getLines(); val res = lines.flatMap(_.split("\\s+")).foldLeft(mutable.Map[String,Long]())((m,y:String)=>{
m += ((y,m.getOrElse(y,0L)+1L)) }) println(res) } /** * advance 没有用到外部变量, foldLeft的遍历所有的功能 */ def scalaWC2(): Unit ={
val lines = Source.fromFile("myfile.txt").getLines(); //val resMap = new mutable.HashMap[String,Long]() val res = lines.map(line=>{line.split("\\s+").toBuffer}) .toList.flatMap(x=>x).map((_,1)).groupBy(_._1) .map(x=>(x._1,x._2.foldLeft(0)((sum,t) =>{sum + t._2}))) println(res) } /** * advance 没有用到外部变量, reduceLeft的遍历所有的功能 */ def scalaWC3(): Unit ={
val lines = Source.fromFile("myfile.txt").getLines(); val res = lines.map(line=>{line.split("\\s+").toBuffer}) .toList.flatMap(x=>x).map((_,1)).groupBy(_._1) .map(x=>(x._2.reduceLeft((x,y)=>{
(x._1,x._2+y._2) }))) //出现 println(res) } /** * 主函数 * * @param args */ def main(args: Array[String]): Unit = {
// arrFun2() // printJavaProp() //customMap() scalaWC41() } /* 总结:wc的实现思路 1.循环+外部map变量+map特性 2.利用集合的方法,通过各种变换,的到结果 3.集合具有遍历的方法有map,filter,foreach,reduceLeft,foldLeft,这些加上外部map变量+map特性都能实现WordCount */ }
 
 

 

转载地址:http://jfwlo.baihongyu.com/

你可能感兴趣的文章
[MethodImpl(MethodImplOptions.Synchronized)]、lock(this)与lock(typeof(...))
查看>>
中国人工智能学会通讯——仿脑GPS基于神经科学的器人定位与导航
查看>>
物联网创新 要具备五种思维
查看>>
《企业首席信息官制度建设指南》宣贯千里行将在京举行
查看>>
Ubuntu Linux继续统领云操作系统江湖
查看>>
台湾云端运算产业协会副理事长刘瑞隆:智能制造的发展离不开云计算人才
查看>>
BI的体系架构及相关技术
查看>>
微金时代:小额贷款公司如何做好“小额贷款贷前风险管控”
查看>>
大数据将在今后改变智能手机的应用方式
查看>>
SDN,这一年都经历了什么?
查看>>
财富杂志公布最佳雇主排名 NetApp高居榜首
查看>>
2017云栖大会开源峰会预告
查看>>
CEA开源性能测试工具N2D2 人工智能芯片竞赛开始了
查看>>
红帽公司即将进军OpenStack网络融合工作
查看>>
警告:非智能手机可入侵核电站的物理隔绝设备
查看>>
CTO下午茶:化繁为简,面面俱到
查看>>
游戏安全资讯精选 2017年 第七期:游戏账号窃取日益猖獗,Struts2 REST插件远程执行命令漏洞全面分析,2017世界物联网博览会IoT安全观点...
查看>>
项立刚:FDD牌照发放 难改行业大格局
查看>>
移动广告作弊流量超过30%?你中招了吗
查看>>
CentOS 6.5环境 MongoDB 3.2.8 单实例安装部署
查看>>