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. 清空iframe的内容

    document.getElementById("web").contentWindow.document.body.innerText = "";

  2. event & EventHandler

    [event & EventHandler] 在老C#中EventHandler指的是一个需要定义一个delegate,这个delegate是回调的规范.例如: public delegate ...

  3. java学习笔记9--内部类总结

    java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...

  4. 查看网络IP连接

  5. token 机制

  6. Word该值小于列表中的前一条目

    在Word中进行多级编号时,前面一个二级标题是2.1,可后面一个二级标题是4.1,于是想把4.1改成2.2,使用 选中有问题的编号,右击"设置列表缩进",在打开的对话框中我们可以看 ...

  7. 算法笔记_139:二分图的最大权匹配(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 何为二分图的最大权匹配问题? 最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大. 2 解决方案 对于此问题的讲解 ...

  8. 算法笔记_021:广度优先查找(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 广度优先查找(Breadth-first Search,BFS)按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边 ...

  9. 基于Unity3D云人脸监測技术

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师.CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  10. Cookie技术

    u  常用的API 创建Cookie对象 Cookie(String name, String value)    ->以指定数据创建Cookie对象 设置Cookie对象 void setMa ...