Scala实现wordCount功能——单机版

1.细节语法如下:

  • map是操作 是把数组/集合中的每一条拿出来进行操作,究竟如何操作,关键在于map中的参数(参数是函数)
  • reduce -> 调用 reduceLeft 是从左往右加
  • fold(初始值)(自定义的函数) -> 调用

2.代码如下:

object Test{
  def main( args:Array[String]): Unit ={
    var lines = Array("wo men shi hao hai zi","wo jiao liu shen","what's your name")
    var words = Array("Hello world","Hello scala","Hello bigdata");

    /*1.为什么这里使用空格就可以将数组lines分开?
    2.这里的map(_.split(" "))可以这么理解,_.split(" ")中的_可以理解成"wo men shi hao hai zi","wo jiao liu shen","what's your name"中每个
    冒号的内容,然后将每个冒号的内容用空格分割。
     */
    var result1 = words.map(_.split(" "))

    /*
    1.将这个result1压平,压平的意思就是将多个Array数组压成一个Array数组
     */
    var result2 = result1.flatten

    /*
    1.将result2中的每个元素拿出来和1形成map元组
     */
    var result3 = result2.map((_,1))

    /*
    1.通过每个元组的第一个值来分组
    2.这里的分组方法因Scala/Spark等编程语言的不同而不同
    3.在scala中是groupBy,但是在spark中就是reduceByKey
    4.这里面的result4中的每个元素  都是一个元组
     */
    var result4 = result3.groupBy((_._1))

    /*
    1.这里的t._1中的t指的是元组中的一个元素,t._1指的是元组中第一个元素的第一部分
     */
    var result5 = result4.map(t =>(t._1,t._2.length))//唯一不明白的地方

    /*
    1.将得到的map转换成list,然后将list按照元组的第二部分来降序排序
     */
    var result6 = result5.toList.sortBy(_._2).reverse

    println(result6);
    /**
      * 1.flatMap()是通过切分开再压平  切分是通过.split(" ")方法
      * 2.map()方法是切分  map((_,1))是形成map序列 每个序列的value都是1
      * 3.groupBy()方法分组 groupBy((_._1))是通过每个元组的第一个值来分组
      * 4.toList()方法是转化成List序列  因为map是不支持排序的,所以使用List
      * 5.sortBy()方法是排序方法  sortBy(_._2)是通过元组的第二个元素来排序
      * 6.reverse()方法是倒转   将排序的结果降序排列
      * */
  }
}

2.运行结果如下:
Scala实现WordCount_scala

3.注
- 使用flatten之后不需要添加()