Scala中使用两种方式对单词进行次数统计(wordCount)
2017-06-28 12:26
549 查看
使用Scala对单词数量进行统计:
假设有单词数组:
val arr = Array(“hello tom”,”hello jerry”,”hello hello”)
需要对Array中的每个单词进行统计计数。
可以使用如下方式:
方式一:
解释说明:
1、 arr.flatMap(_.split(” “)) //相当于是将Array中的数组进行压缩,下划线代表的是Arrary中的每个元素,并且按照” “进行切分,运行后的结果如下:
2、 接着对map中的每个元素进行汇总计算
解释说明:
这里的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、最后将结果进行求和
其中t._1就是上面的单词作为key,value是t._2.size,即Array的大小
方式二:
其中:
arr.flatMap(.split(” “)).map((,1)).groupBy(_._1),这里和上面的一样,不用赘述
mapValues的用途是直接将Array的内容进行按照key相同的进行统计计算。
.foldLeft(0)(+._2) 第一个下划线表示的是的是数组中的key,意思是分别取出其中的Array集合,.foldLeft(0)(+_.2)表示将Array进行求和,后边括号中的第一个下划线表示的是处事值0,第二个下划线是表示的是元组,.2表示的是元组中的第二个值,即单词出现的次数。
假设有单词数组:
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表示的是元组中的第二个值,即单词出现的次数。
相关文章推荐
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- hadoop基础----hadoop实战(三)-----hadoop运行MapReduce---对单词进行统计--经典的自带例子wordcount
- 使用命令shell和MyEclipse两种方式执行Hadoop的WordCount程序
- hadoop基础----hadoop实战(三)-----hadoop运行MapReduce---对单词进行统计--经典的自带例子wordcount
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 统计查询-根据条件进行count的两种实现方式- oracle
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 启动Spark Shell,在Spark Shell中编写WordCount程序,在IDEA中编写WordCount的Maven程序,spark-submit使用spark的jar来做单词统计
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用hive、java api两种方式实现wordcount功能、及个人感悟