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

本文共 3266 字,大约阅读时间需要 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 */ }
 
 

 

转载于:https://www.cnblogs.com/rocky-AGE-24/p/7301847.html

你可能感兴趣的文章
【PHP篇】面向对象基础
查看>>
【BZOJ-2342】双倍回文 Manacher + 并查集
查看>>
RTOS Semaphore Services
查看>>
Bug写作指南
查看>>
跳槽离职的那些事儿?(转)
查看>>
PTAM 编译安装 on MAC(mavericks)
查看>>
使用XmlViewResolver视图解析器
查看>>
AJAX - 向服务器发送请求
查看>>
深入理解子类和父类之间关系
查看>>
帝国时代II 高清版 steam 4.4 字体替换 微软雅黑
查看>>
outlook 配置经验
查看>>
[转]Linux命令的返回值
查看>>
NSTimeZone
查看>>
gsp 换行
查看>>
【DWM1000】 code 解密8一 TAG接收blink response 信号
查看>>
添加跟反射
查看>>
uva 1451(树形结合)
查看>>
在C#环境中动态调用IronPython脚本(二)
查看>>
ASP.Net 重写IHttpModule 来拦截 HttpApplication 实现HTML资源压缩和空白过滤
查看>>
javascript时间格式转换
查看>>