$07[Scala练习]

数据准备

allprovince.txtproduct.txt

需求一:统计没有农贸市场的省份有哪些?

  1. 对农产品数据进行处理(过滤脏数据)
  2. 对第一步处理后的数据列裁剪,只获取省份信息
  3. 对第二步获取到的所有省份信息去重
  4. 对省份数据与第三步获取到的去重的省份信息求差集,得到的就是没有农贸市场的省份
package com.atguigu.demo

import scala.io.Source

/**
 * 需求一:统计没有农贸市场的省份有哪些?
 */

object demo1 {
  def main(args: Array[String]): Unit = {
    //1.读取数据
    val allProvincesList = Source.fromFile("datas/allprovince.txt").getLines().toList
    val productList = Source.fromFile("datas/product.txt").getLines().toList
    //2.是否要过滤(脏数据),是否要去重,是否要列裁剪
        //2.1过滤脏数据
        val productFilterList = productList.filter(_.split("\t").size == 6)
        //2.2列裁剪[保留农产品数据的省份字段]
        val productSelectList = productFilterList.map(line => {
          val arr = line.split("\t")
          arr(4)
        })
         //2.3去重
         val disList = productSelectList.distinct
    //3.求差集
    val result = allProvincesList.diff(disList)
    //4.结果展示
    result.foreach(println(_))

  }

}

需求二:获取农产品种类数最多的三个省份?

  1. 对农产品数据进行处理(过滤掉脏数据)
  2. 对第一步处理后的数据列裁剪,只保留农产品和省份信息
  3. 对第二步处理后的数据进行去重
  4. 对第三步处理后的数据按照省份进行分组(groupBy)
  5. 对第四步处理后的数据进行map,获取每个省份的农产品种类数
  6. 对第五步处理后的数据进行排序(取前三)
package com.atguigu.demo

import scala.io.Source

/**
 * 需求二:获取农产品种类数最多的三个省份
 */
object demo2 {
  def main(args: Array[String]): Unit = {
   //1.读取数据
   val productList = Source.fromFile("datas/product.txt").getLines().toList
    //2.过滤
    val filterList = productList.filter(_.split("\t").size == 6)
    //3.列裁剪[省份+菜名]
    val selectList = filterList.map(line => {
      val arr = line.split("\t")
      (arr(4), arr(0))
    })
    //4.去重[同一个省份有多个农贸市场可以卖同一种菜]
    val disList = selectList.distinct
    //5.按照省份分组
    val groupedMap = disList.groupBy({
      case (provice, name) => provice
    })
    //6.统计每个省份的菜的种类数
    val reduceList = groupedMap.map(x => {
      (x._1, x._2.length)
    })
    //7.排序获取前三
    val result = reduceList.toList.sortBy {
      case (provice, num) => num
    }.reverse.take(3)
    //8.结果展示
    result.foreach(print(_))
  }
}

需求三获取每个省份农产品种类数最多的三个农贸市场?

  1. 统计每个省份每个农贸市场的菜的种类数
  2. 按照省份进行分组
  3. 对每个省所有农贸市场数据排序取前三
package com.atguigu.demo

import scala.io.Source

/**
 * 需求三:获取每个省份农产品种类数最多的三个农贸市场
 */
object demo3 {
  def main(args: Array[String]): Unit = {
    //1.读取数据
    val productList = Source.fromFile("datas/product.txt").getLines().toList
    //2.过滤脏数据
    val filterList = productList.filter(_.split("\t").size == 6)
    //3.列裁剪[省份,菜名,农贸市场]
    val selectList = filterList.map(line => {
      val arr = line.split("\t")
      (arr(4), arr(3), arr(0))
    })
    //4.去重[同一个农贸市场的多个摊位可能卖同一种菜]
    val disList = selectList.distinct
    //5.按照省份+农贸市场分组
    val pmGroupedMap = disList.groupBy({
      case (provice, market, name) => (provice, market)
    })
    //6.统计每个省份每个农贸市场的菜的种类数
    val pmNumList = pmGroupedMap.map(x => {
      (x._1, x._2.length)
    })
    //7.按照省份分组
    val proviceMap = pmNumList.groupBy({
      case ((provice, market), num) => provice
    })
    //8.对每个省所有农贸市场数据排序取前三
    val result = proviceMap.map(x => {
      val top3List = x._2.toList.sortBy {
        case ((provice, market), num) => num
      }.reverse.take(3)
      val top3 = top3List.map {
        case ((provice, market), num) => (market, num)
      }
      (x._1,top3)

    })
    //9.结果展示
     result.foreach(println(_))
  }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值