版权声明:本文为博主原创文章,未经博主允许不得转载!!

欢迎访问:https://blog.csdn.net/qq_21439395/article/details/81022890
<https://blog.csdn.net/qq_21439395/article/details/81022890>

交流QQ: 824203453

 

实现方案一:  map + flatten + groupBy

实现方式二:flatMap + groupBy
object ScalaWordCount { def main(args: Array[String]): Unit = { // 原始数据 val
arr = Array[String]("hello tom hello jim", "hello spark hello jim tom") //
一行完全可以实现,但是不推荐 // arr.map(x=>x.split("
")).flatten.map(x=>(x,1)).groupBy(x=>x._1).map(x=>(x._1,x._2.length)).toList.sortBy(x=>
-x._2) // .foreach(x=>println(x)) // 数据切分 // val lines: Array[Array[String]] =
arr.map(x=>x.split(" ")) // 数据压平 // val flatLines: Array[String] =
lines.flatten // 有一个替代的方法,flatMap 先map 再flatten val flatLines = arr.flatMap(x
=> x.split(" ")) // 和1 组装起来 val wordsWithOne: Array[(String, Int)] =
flatLines.map(w => (w, 1)) // 按照单词分组 就是元组的第一个元素 val grouped: Map[String,
Array[(String, Int)]] = wordsWithOne.groupBy(t => t._1) // 统计单词出现的次数
正常情况下是求和,但是这里是一个特例,所以可以使用长度来判断次数 val result: Map[String, Int] = grouped.map(t
=> (t._1, t._2.length)) // 排序 // map不能直接排序,那么就转变成list,然后调用List集合上的sortBy方法 val
sortedResult: List[(String, Int)] = result.toList.sortBy(t => -t._2) //
sortedResult.foreach(x=>println(x)) sortedResult.foreach(println) } }
 

实现方式三:flatMap + mapValues  直接统计数组的长度了
// 原始数据 val arr = Array[String]("hello tom hello jim","hello spark hello jim
tom") // 有一个替代的方法,flatMap 先map 再flatten val flatLines = arr.flatMap(_.split("
")) // 和1 组装起来 val wordsWithOne: Array[(String, Int)] = flatLines.map(w=>(w,1))
// 按照单词分组 就是元组的第一个元素 val grouped: Map[String, Array[(String, Int)]] =
wordsWithOne.groupBy(t=>t._1) // 统计单词出现的次数 正常情况下是求和,但是这里是一个特例,所以可以使用长度来判断次数 val
result: Map[String, Int] = grouped.mapValues(_.length) val sortedResult:
List[(String, Int)] = result.toList.sortBy(t=> -t._2)
sortedResult.foreach(println)
 

实现方式四:  在mapValues中,直接统计 次数的总和 
val arr = Array[String]("hello tom hello jim", "hello spark hello jim tom")
val flatLines = arr.flatMap(_.split(" ")) val wordsWithOne: Array[(String,
Int)] = flatLines.map((_, 1)) val grouped: Map[String, Array[(String, Int)]] =
wordsWithOne.groupBy(_._1) val result: Map[String, Int] = grouped.mapValues({
// 输入参数 Array[(String, Int)] t => // 取出数组中的每一个元素的第二个值,也就是单词的次数 再调用sum方法求总和
t.map(_._2).sum })
 

实现方式五: 在mapValues中,调用foldLeft方法,统计单词出现的总的次数

 
val arr = Array[String]("hello tom hello jim", "hello spark hello jim tom")
val flatLines = arr.flatMap(_.split(" ")) val wordsWithOne: Array[(String,
Int)] = flatLines.map((_, 1)) val grouped: Map[String, Array[(String, Int)]] =
wordsWithOne.groupBy(_._1) val result: Map[String, Int] = grouped.mapValues({
// 输入参数 Array[(String, Int)] t => // 取出数组中的每一个元素的第二个值,也就是单词的次数 再调用sum方法求总和
t.map(_._2).sum // 这里只能用foldLeft,因为类型不一致 x:Int y:(String,Int) t.foldLeft(0)((x,
y) => x + y._2) })
 

版权声明:本文为博主原创文章,未经博主允许不得转载!!

欢迎访问:https://blog.csdn.net/qq_21439395/article/details/81022890
<https://blog.csdn.net/qq_21439395/article/details/81022890>

交流QQ: 824203453

 

 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信