Scala中使用两种方式对单词进行次数统计 wordCount

首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程

                    

使用Scala对单词数量进行统计:
假设有单词数组:
val arr = Array(“hello tom”,”hello jerry”,”hello hello”)
需要对Array中的每个单词进行统计计数。
可以使用如下方式:
方式一:

scala> arr.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(t=>(t._1,t._2.size))res1: scala.collection.immutable.Map[String,Int] = Map(tom -> 1, jerry -> 1, hello -> 4)
  
  
  • 1
  • 2

解释说明:
1、 arr.flatMap(_.split(” “))    //相当于是将Array中的数组进行压缩,下划线代表的是Arrary中的每个元素,并且按照” “进行切分,运行后的结果如下:

scala> arr.flatMap(_.split(" "))res0: Array[String] = Array(hello, tom, hello, jerry, hello, hello)
  
  
  • 1
  • 2

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))
  
  
  • 1
  • 2

解释说明:
这里的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))
  
  
  • 1

其中t._1就是上面的单词作为key,value是t._2.size,即Array的大小

方式二:

arr.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))
  
  
  • 1

其中:
arr.flatMap(.split(” “)).map((,1)).groupBy(_._1),这里和上面的一样,不用赘述

scala> arr.flatMap(_.split(" ")).map((_,1)).groupBy(_._1)res4: 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)))
  
  
  • 1
  • 2

mapValues的用途是直接将Array的内容进行按照key相同的进行统计计算。
.foldLeft(0)(+._2)    第一个下划线表示的是的是数组中的key,意思是分别取出其中的Array集合,.foldLeft(0)(+_.2)表示将Array进行求和,后边括号中的第一个下划线表示的是处事值0,第二个下划线是表示的是元组,.2表示的是元组中的第二个值,即单词出现的次数。

           

浏览人工智能教程

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值