Scala中使用两种方式对单词进行次数统计(wordCount)
使用Scala對單詞數量進行統計:
假設有單詞數組:
val arr = Array(“hello tom”,”hello jerry”,”hello hello”)
需要對Array中的每個單詞進行統計計數。
可以使用如下方式:
方式一:
解釋說明:
1、 arr.flatMap(_.split(” “)) //相當于是將Array中的數組進行壓縮,下劃線代表的是Arrary中的每個元素,并且按照” “進行切分,運行后的結果如下:
2、 接著對map中的每個元素進行匯總計算
scala> arr.flatMap(_.split(" ")).map((_,1)) res2: Array[(String, Int)] = Array((hello,1), (tom,1), (hello,1), (jerry,1), (hello,1), (hello,1))解釋說明:
這里的map((_,1))相當于是將前面的Array變成元組的形式
3、接著把array進行分組:
scala> arr.flatMap(.split(” “)).map((,1)).groupBy(_._1)
res3: scala.collection.immutable.Map[String,Array[(String, Int)]] = Map(tom -> Array((tom,1)), jerry -> Array((jerry,1)), hello -> Array((hello,1), (hello,1), (hello,1), (hello,1)))
解釋說明:
這里的意思是將上面的array按照key的方式進行分組
4、最后將結果進行求和
arr.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(t=>(t._1,t._2.size))其中t._1就是上面的單詞作為key,value是t._2.size,即Array的大小
方式二:
arr.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))其中:
arr.flatMap(.split(” “)).map((,1)).groupBy(_._1),這里和上面的一樣,不用贅述
mapValues的用途是直接將Array的內容進行按照key相同的進行統計計算。
.foldLeft(0)(+._2) 第一個下劃線表示的是的是數組中的key,意思是分別取出其中的Array集合,.foldLeft(0)(+_.2)表示將Array進行求和,后邊括號中的第一個下劃線表示的是處事值0,第二個下劃線是表示的是元組,.2表示的是元組中的第二個值,即單詞出現的次數。
總結
以上是生活随笔為你收集整理的Scala中使用两种方式对单词进行次数统计(wordCount)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么吃菠萝要盐水泡?
- 下一篇: 口香糖为什么能开椰子?