Scala 入门 WordCount
来源:互联网 发布:阿里云 bd 待遇 编辑:程序博客网 时间:2024/06/03 14:10
此代码仅供学习参考,若有理解错误的地方请及时联系博主,谢谢。
package FileIOimport scala.io.Source;import scala.util.matching.Regexobject WordIO { def main(args: Array[String]) { val Sit = Source.fromFile("D://cc.txt").getLines() // 文件读取,按行 val word = Sit.flatMap { line => line.split(" ") } // 分离word val wordregex = word.flatMap(str => stringregex(str)) val group = wordregex.foldLeft(Map.empty[String, Int]) { // 向左折叠 def foldLeft[B](z: B)(op: (B, A) => B): B = { A的类型其实就是调用这个函数的类型this.seq (kv, str) => kv + (str -> (kv.getOrElse(str, 0) + 1)) // 初始化一个要得到的类型B(Map[String,Int]) 由A和B进过op,就是操作最终生成B(第一步是Empty的Map放入一个str和0+1,第二步传入的是第一步产生的Map及wordregex中第二个值,进行if else) } // map中的ifelse操作 Map[String,Int](也就是kv)中存在str则用str的值+1,若没有就用0+1 for(kv <-group){println(kv)} } def stringregex (str: String) : List[String] = { val pattern = new Regex("[a-zA-Z]*['|’]?[a-zA-Z]*"); // 排除,."“” 但要保留’'等,使统计更精确 val string = (pattern findAllIn(str)).mkString("") return List(string) }}
对于flatLeft()函数的解释:
def foldLeft[B](z: B)(op: (B, A) => B): B = { var result = z this.seq foreach (x => result = op(result, x)) result } 此方法接受2个参数,z和op,一个是B类型的参数,一个是返回B类型的函数。在看到这个trait其实是TraversableOnce,可迭代的集合。def seq: TraversableOnce[A]比如一个val listA = List(1,2,3)listA其实是实现了TraversableOnce这个trait的。我们可以直接使用:[java] view plain copyscala> listA.foldLeft(0)((sum,i)=>sum+i) res26: Int = 6 这个里面的0其实就是z返回值是Int类型即B类型那么可以看出op这个函数返回值也需要是Int类型可以看出val result = z, 这里其实就是0,x=>result=op(result, x) , sum其实也是z其实z就是返回值,this.seq在这里就是list,对list遍历,这里执行op函数。这里我们执行的是sum+i,就是累加了1+2+3=6
对于getOrElse()函数的解释:
Map中的if()else()操作的变型在Spark中写法是:persons.getOrElse("Spark",1000) //如果persons这个Map中包含有Spark,取出它的值,如果没有,值就是1000。for循环访问persons里面的Key和valuefor((key,value)<- persons)println(key+":"+value)值:Hadoop:11Spark:6
函数参考来源:
http://blog.csdn.net/oopsoom/article/details/23447317?spm=5176.100239.blogcont32477.3.xMKWCN
http://www.cnblogs.com/supersom/p/5094666.html
阅读全文
0 0
- Scala 入门 WordCount
- Scala入门学习之【wordcount】
- Scala入门学习之【wordcount】
- scala wordcount
- scala wordcount
- scala-wordcount
- Scala WordCount
- Spark Streaming开发入门——WordCount(Java&Scala)
- Spark Streaming开发入门——WordCount(Java&Scala)
- spark(1)-入门spark之scala sbt wordcount实验
- 用scala实现wordcount
- Scala实现WordCount功能
- scala akka wordcount程序
- Scala写的wordcount
- 不用scala运行wordcount
- scala 实现WordCount
- scala实现wordcount
- Scala之WordCount
- jeecg如何在子页面删除页签
- Python3--文件读取、写入、追加及seek()方法的使用
- hdu 1878 欧拉回路
- 2017-8-9
- hashMap的底层数据结构:数组+链表
- Scala 入门 WordCount
- react中使用Link在不同路由之间进行参数传值
- 线段树
- C语言(20)素数求和问题
- fork && fork || fork问题
- 看我鼓捣华西安全网(cha.hxsec.com)密码泄露查询接口(有意思的js混淆)
- 第五课记录 Hadoop的起源——Google的基本思想之一
- js中的for循环
- Graphviz绘图的安装与使用