客户管理系统开发定制Scala编程实战 —— 一文学会编码大数据基础案例wordcount

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

​🏠​ 个人主页:
📚 推荐专栏:客户管理系统开发定制更多专栏尽在主页!


​📖​ 本期文章:编程实战 —— 客户管理系统开发定制一文学会编码大数据基础案例wordcount
客户管理系统开发定制如果对您有帮助还请三连支持,定会一 一回访!🙋🏻‍♂️


📌本文目录


Scala客户管理系统开发定制开发实战练习

1、Word count案例实战

1.1、word count 过程分析

1.2、代码实现过程

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

1.3、编码实现

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 // 将每一行的数据 放到一个数组中    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、将统计结果打印    println(wordCount)  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

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

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

写法二:

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))    println(count)  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

1.4、wordcount进阶

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

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

需求还是统计wordcount

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

方法一:

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

编码:

// 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(  t => {    val line = t._1    val count = t._2    (line + " ") * count  })// 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(  kv => {    (kv._1, kv._2.size)  })println(wordcount)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

方法二:

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

编码实现:

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(    t => {      val line = t._1      val count = t._2      val words = line.split(" ")      words.map(        word => (word, count)      )    }  )  // TODO 2、分组   val group: Map[String, List[(String, Int)]] = map.groupBy(_._1)    // TODO 3、聚合  val wordcount: Map[String, Int] = group.mapValues(    list => {      list.map(_._2).sum      }  )  println(wordcount)}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

2、需求实战

2.1、需求分析

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

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

2.2、编码实现

package com.zhou.scala.chapter6/** * @author it春和 * @create 2022-05-14 16:39 */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(      t => {        ((t._2 + " " + t._3), 1)      }    )    // TODO 2、分组 相同名字 相同省份的一组    val groupData = mapData.groupBy(_._1)    println(groupData)    // TODO 3、聚合  Map (河南 衣服 -> 3, 河南 鞋 -> 6    val countData = groupData.mapValues(      list => list.size    )    println(countData)    // TODO 4、将聚合结果进行数据结构转换    val mapData1 = countData.toList.map(  // 注意这里需要将counData转为List 不然是map map的话会覆盖相同的key 造成数据统计不对      kv => {        val keys = kv._1.split(" ")        (keys(0), (keys(1), kv._2))      }    )    // TODO 5、分组    val groupData1 = mapData1.groupBy(_._1)      // TODO 6、处理value 只保留商品 点击次数      .mapValues(        list => {          list.map(_._2)            // TODO 7、进行排序 降序排序            .sortBy(_._2)(Ordering.Int.reverse)        }      )    println(groupData1)  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

2.3、运行结果

3、小结

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发