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 */
}
 

scala Wordcount的更多相关文章

  1. scala wordcount kmeans

    scala wordcount   kmeans k-means算法的输入对象是d维向量空间的一些点,对一个d维向量的点集进行聚类. k-means聚类算法会将集合D划分成k个聚簇.

  2. scala WordCount案例

    数据样例: java,spark,hadoop,python,datax java,spark,hadoop,spark,python,datax java,spark,hadoop,python,d ...

  3. Scala Spark WordCount

    Scala所需依赖 <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-l ...

  4. Flink单机版安装与wordCount

    Flink为大数据处理工具,类似hadoop,spark.但它能够在大规模分布式系统中快速处理,与spark相似也是基于内存运算,并以低延迟性和高容错性主城,其核心特性是实时的处理流数据.从此大数据生 ...

  5. 2019/2/23Scala学习开始(Scala简介)

    Scala简介    Scala是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scala运行在Java虚拟机上,并兼容现有的Java程序 ...

  6. 大数据入门到精通9-真正得wordcount

    本章节实现一个真正得wordcount 得spark程序. 一.从本地获得一个数据集 val speechRdd= sc.parallelize(scala.io.Source.fromFile(&q ...

  7. Spark学习笔记——在远程机器中运行WordCount

    1.通过realy机器登录relay-shell ssh XXX@XXX 2.登录了跳板机之后,连接可以用的机器 XXXX.bj 3.在本地的idea生成好程序的jar包(word-count_2.1 ...

  8. Spark学习笔记——安装和WordCount

    1.去清华的镜像站点下载文件spark-2.1.0-bin-without-hadoop.tgz,不要下spark-2.1.0-bin-hadoop2.7.tgz 2.把文件解压到/usr/local ...

  9. spark之 spark 2.2.0 Standalone安装、wordCount演示

    说明:前提安装好hadoop集群,可参考 http://blog.csdn.net/zhang123456456/article/details/77621487 一. scala 安装 1.下载 s ...

随机推荐

  1. 转载 C++实现的委托机制

    转载 C++实现的委托机制 1.引言 下面的委托实现使用的MyGUI里面的委托实现,MyGUI是一款强大的GUI库,想理解更多的MyGUI信息,猛击这里http://mygui.info/ 最终的代码 ...

  2. js 多域名跳转

    <script>try {if( self.location == "http://cnblogs.com/endv" ) { top.location.href = ...

  3. 微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java

    欢迎加入群:347245650   345531810 进行讨论相互交流  我的微信号:572839485 我的微信公众账号  我的微社区欢迎关注 索取源码←请点击 图床:没有服务器 拖拽图片 外网即 ...

  4. SQL语句中拆分字段

    SELECT PARSENAME(replace(MONITOR_ROOM_ID,'^' , '.'), 1) AS RoomID FROM ZY_MONITOR_ROOM 遇到以前系统高人设计的表, ...

  5. ! Undefined control sequence. \CJK@XXX ...endcsname {`#2}{`#3}\CJK@ignorespaces \fi l.43 \end{document}

    错误的原因是:你的文本内容超过了一页,需要增加新的一页. 解决问题的方法就是在\end{CJK}或者\end{CJK*}之前加入\newpage,\clearpage或者\cleardoublepag ...

  6. POJ1035

    #include <iostream> #include <cstdio> #include <cstring> #include <vector> # ...

  7. 手机网站调试神器之chrome控制台

    现在真是一个信息化的时代,每个人手里都拿着一款智能机,上班下班走路坐车之余都会玩玩手机,上上网.于是作为广大网站媒体来说,争抢手机市场无疑是刻不容缓.对于我们Web前端工程师来说,了解并掌握手机编程的 ...

  8. Unity3D 多平台_预编译相关宏定义

    http://www.cnblogs.com/zhaoqingqing/p/3510332.html API地址:http://docs.unity3d.com/Documentation/Manua ...

  9. STRUTS2配置动态页面

      STRUTS2配置动态页面 CreateTime--2017年5月11日09:00:31Author:Marydon 1.struts配置 <?xml version="1.0&q ...

  10. spring.xml从外部文件引入数据库配置信息

    <!-- 分散配置 --> <context:property-placeholder location="classpath:jdbc.properties" ...