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、 arr.flatMap(_.split(” “)) //相当于是将Array中的数组进行压缩,下划线代表的是Arrary中的每个元素,并且按照” “进行切分,运行后的结果如下:

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

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),这里和上面的一样,不用赘述

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)))

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

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值