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. MapReduce开发技巧

    数据类型的选择 自定义数据类型 参考:Hadoop提交作业自定义排序和分组 MapWritable/SortedMapWritable Hadoop中可传输的Map集合,和Java中的Map用法差不多 ...

  2. 如何解决Ubuntu与Windows双系统时间不同步

    导读 不知道有没朋友跟我一样是 Ubuntu 和 Windows 双系统?今天有朋友问到我,当他从 Ubuntu 系统重新启动到 Windows 时,会发现 Windows 中的时间变了,他问我有没办 ...

  3. win8.1安装开发工具 vs2015 Visual Studio 2015 Preview Downloads

    1.首先全新安装win8.1 略 破解激活.... 2.安装Visual Studio 2015 Visual Studio 2015 是免费的,不存在破解版本, 如果安装过程中存在问题,建议先把本文 ...

  4. mvn 编译错误java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter. <init>(Z)V

    Spring+struts2 +hibernate3集成,在后台测试时报的错,报错的这句话: Exception in thread "main" java.lang.NoSuch ...

  5. es5 - array - reverse

    /** * 描述:也就是数组元素反转 * 使用:arr.reverse() */ var a = [1,2,3]; console.log(a.reverse()); /** * 一个经典的问题:如何 ...

  6. mysql last_insert_id() (转载)

    先来看看官方的说明 The ID that was generated is maintained in the server on a per-connection basis. This mean ...

  7. java FileI(O)nputStream为什么比BufferedI(O)utputStream慢?

    因为buffered多了一个缓冲区,读和写都是先把硬盘或者内存中的数据放到内存中一块缓存区域,到一定大小读写到硬盘或者内存   package io; import java.io.*; public ...

  8. C#删除xml指定节点

  9. AutoFac文档4(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 自动装配 从容器中可用 ...

  10. 优化神器 beamoff

    http://files.cnblogs.com/files/yipu/beamoff.zip csdn上有下载:http://download.csdn.net/download/bytige/83 ...