0


Scala编程实战 —— 一文学会编码大数据基础案例wordcount

🙆‍♂️🙆‍♂️ 写在前面

​🏠​ 个人主页:csdn春和
📚 推荐专栏:更多专栏尽在主页!
 JavaWeb专栏(从入门到实战超详细!!!)
 SSM专栏 (更新中…)
​📖​ 本期文章:Scala编程实战 —— 一文学会编码大数据基础案例wordcount
如果对您有帮助还请三连支持,定会一 一回访!🙋🏻‍♂️


📌本文目录


Scala开发实战练习

1、Word count案例实战

1.1、word count 过程分析

在这里插入图片描述

1.2、代码实现过程

  1. // TODO 1、读取文件 获取原始数据// TODO 2、扁平化 将原始数据拆分为一个个单词// TODO 3、对单词进行分组操作// TODO 4、对分组后的数据进行数量的统计// TODO 5、将统计结果打印

1.3、编码实现

  1. object Scala_Collection04_WordCount {def main(args: Array[String]):Unit={// TODO word count案例// TODO 1、读取文件 获取原始数据val source: BufferedSource = Source.fromFile("data/word.txt")val array: Array[String]= source.getLines().toArray // 将每一行的数据 放到一个数组中
  2. source.close()// TODO 2、扁平化 将原始数据拆分为一个个单词val flatMap = array.flatMap(line => line.split(" "))// TODO 3、对单词进行分组操作val wordGroup: Map[String, Array[String]]= flatMap.groupBy(word => word)// TODO 4、对分组后的数据进行数量的统计// 如果数据在转换的时候无需对key进行操作,只针对value进行处理,可以使用mapValues方法val wordCount: Map[String,Int]= wordGroup.mapValues(v => v.size)// TODO 5、将统计结果打印
  3. println(wordCount)}}

在这里插入图片描述

如果非要使用map进行映射则可以这样写

  1. // 使用mapval count = wordGroup.map(
  2. t =>{val k = t._1
  3. val v = t._2
  4. (k, v.size)})

写法二:

  1. object Scala_Collection04_WordCount2 {def main(args: Array[String]):Unit={// TODO word count案例val list = List("hello scala scala","hello spark")val flatMap: Seq[String]= list.flatMap(_.split(" "))val group: Map[String, Seq[String]]= flatMap.groupBy(word => word)val count = group.map(t =>(t._1, t._2.size))
  2. println(count)}}

1.4、wordcount进阶

假如给的数据不是那样的呢?

  1. val list = List(("hello scala scala",4),("hello spark",2))

需求还是统计wordcount

  1. 这样我们需要将数据格式转换为我们所需要的

方法一:

将数据变为 “hello spark hello spark” 多了一步数据结构转变的操作

在这里插入图片描述

编码:

  1. // TODO word count案例val list = List(("hello scala scala",4),("hello spark",2))// 数据结构变化 ("hello spark",2) -> "hello spark hello spark"// TODO 1、转换数据结构val map: Seq[String]= list.map(
  2. t =>{val line = t._1
  3. val count = t._2
  4. (line +" ")* count
  5. })// TODO 2、扁平化映射val flatMap: Seq[String]= map.flatMap(_.split(" "))// TODO 3、分组val groupMap: Map[String, Seq[String]]= flatMap.groupBy(word => word)// TODO 4、聚合 wordcountval wordcount = groupMap.map(
  6. kv =>{(kv._1, kv._2.size)})
  7. println(wordcount)

在这里插入图片描述

方法二:

将数据转换为 (hello,4)(scala,4)这样的数据格式

编码实现:

  1. def main(args: Array[String]):Unit={// TODO word count案例val list = List(("hello scala scala",4),("hello spark",2))// 将数据转变 (hello,4) (scala,4)// TODO 1、转换数据结构val map = list.flatMap(
  2. t =>{val line = t._1
  3. val count = t._2
  4. val words = line.split(" ")
  5. words.map(
  6. word =>(word, count))})// TODO 2、分组 val group: Map[String, List[(String,Int)]]= map.groupBy(_._1)// TODO 3、聚合val wordcount: Map[String,Int]= group.mapValues(
  7. list =>{
  8. list.map(_._2).sum
  9. })
  10. println(wordcount)}

2、需求实战

2.1、需求分析

需求:统计不同省份的商品点击排行

分析:不同省份为key 商品点击排行为value

在这里插入图片描述

2.2、编码实现

  1. packagecom.zhou.scala.chapter6/**
  2. * @author it春和
  3. * @create 2022-05-14 16:39
  4. */object Scala_Collection12_Exercise {def main(args: Array[String]):Unit={val list = List(("zhangsan","河北","鞋"),("lisi","河北","衣服"),("wangwu","河北","鞋"),("zhangsan","河南","鞋"),("lisi","河南","衣服"),("wangwu","河南","鞋"),("zhangsan","河南","鞋"),("lisi","河北","衣服"),("wangwu","河北","鞋"),("zhangsan","河北","鞋"),("lisi","河北","衣服"),("wangwu","河北","帽子"),("zhangsan","河南","鞋"),("lisi","河南","衣服"),("wangwu","河南","帽子"),("zhangsan","河南","鞋"),("lisi","河北","衣服"),("wangwu","河北","帽子"),("lisi","河北","衣服"),("wangwu","河北","电脑"),("zhangsan","河南","鞋"),("lisi","河南","衣服"),("wangwu","河南","电脑"),("zhangsan","河南","电脑"),("lisi","河北","衣服"),("wangwu","河北","帽子"))// TODO 1、数据结构转变 (人,省份,商品) --> (省份 商品,1)val mapData = list.map(
  5. t =>{((t._2 +" "+ t._3),1)})// TODO 2、分组 相同名字 相同省份的一组val groupData = mapData.groupBy(_._1)
  6. println(groupData)// TODO 3、聚合 Map (河南 衣服 -> 3, 河南 鞋 -> 6val countData = groupData.mapValues(
  7. list => list.size
  8. )
  9. println(countData)// TODO 4、将聚合结果进行数据结构转换val mapData1 = countData.toList.map(// 注意这里需要将counData转为List 不然是map map的话会覆盖相同的key 造成数据统计不对
  10. kv =>{val keys = kv._1.split(" ")(keys(0),(keys(1), kv._2))})// TODO 5、分组val groupData1 = mapData1.groupBy(_._1)// TODO 6、处理value 只保留商品 点击次数.mapValues(
  11. list =>{
  12. list.map(_._2)// TODO 7、进行排序 降序排序.sortBy(_._2)(Ordering.Int.reverse)})
  13. println(groupData1)}}

2.3、运行结果

在这里插入图片描述

3、小结

wordcount是所有大数据框架都基本要做的案例,使用scala编写的wordcount代码对比hadoop更简洁更易写
这主要是对scala集合中功能函数的熟悉与使用

标签: scala spark big data

本文转载自: https://blog.csdn.net/m0_66947873/article/details/124794122
版权归原作者 it春和 所有, 如有侵权,请联系我们删除。

“Scala编程实战 —— 一文学会编码大数据基础案例wordcount”的评论:

还没有评论