El lenguaje Scala implementa el recuento de palabras

object wordCount{
    
    
  def main(args: Array[String]): Unit = {
    
    
    val str = List("hadoop hive hadoop","hive hello mysql pig hello hadoop")
    val res1 = str.flatMap((s:String)=>s.split(" "))//1.按空格来切分单词
    //res1= List(hadoop, hive, hadoop, hive, hello, mysql, pig, hello, hadoop)

    val res2 = res1.map((x:String)=>((x:String),1)) //2.将每个切分后的元素创建成对偶元祖的形式(K,V)
    //res2= List((hadoop,1), (hive,1), (hadoop,1), (hive,1), (hello,1), (mysql,1), (pig,1), (hello,1), (hadoop,1))

    val res3 = res2.groupBy((x:(String,Int))=>(x._1))//3.将对偶元祖中的元素按不同的单词依次分组,  _.1表示元组的第1个值
    //res3= Map(hadoop -> List((hadoop,1), (hadoop,1), (hadoop,1)), hive -> List((hive,1), (hive,1)), mysql -> List((mysql,1)), hello -> List((hello,1), (hello,1)), pig -> List((pig,1)))

    val res4 = res3.toList.map((x:(String,List[(String,Int)]))=>(x._1,x._2.size)) //4.求出每个单词出现的次数,因为Map没有提供计算长度的方法,所以先转换为List,然后计算单词出现的次数
    //res4= List((hadoop,3), (hive,2), (mysql,1), (hello,2), (pig,1))

    /*  对上述代码的简化版
val res2 = res1.map((_,1))
val res3 = res2.groupBy(_._1)
val res4 = res3.toList.map((x)=>(x._1,x._2.size))
val res5 =str.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).toList.map((x)=>(x._1,x._2.size))
     */

    /*  wordcount程序的简化最终版
    val res5 =str.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).toList.map((x)=>(x._1,x._2.size))
    println("res5= "+res5)
     */
    for(item <- res4){
    
    
      println(item)
    }

  }
}


resultado de la operación:

Inserte la descripción de la imagen aquí

Aquí es una descripción breve de la inferencia tipo de parámetro y abreviatura en el Scala mencionada
1. Cuando el tipo de parámetro se puede inferir, el tipo de parámetro se pueden omitir.
2. Cuando la función entrante tiene sólo un único parámetro, los paréntesis puede omitirse
3. Si la variable solo aparece una vez en el lado derecho de =>, puede usar _ en su lugar

Si no tiene claro las funciones de orden superior en el código anterior, puede consultar el artículo de este blogger
https://blog.csdn.net/m0_38109926/article/details/108695731

Supongo que te gusta

Origin blog.csdn.net/weixin_44080445/article/details/109501445
Recomendado
Clasificación