scala中农产品经典案列

import scala.io.Source

object $01_Test {

  /**
    * 1、获取没有农贸市场的所有省份
    *
    * 2、获取农产品种类最多的三个省份
    *
    * 3、获取每个省份中农产品种类最多的三个农贸市场
    *
    */
  def main(args: Array[String]): Unit = {

    //读取数据
    val allProvinces = Source.fromFile("datas/allprovince.txt").getLines().toList

    val products = Source.fromFile("datas/product.txt").getLines().toList
    //获取没有农贸市场的所有省份
    //m1(allProvinces,products)
    //获取农产品种类最多的三个省份
    //m2(products)
    //获取每个省份中农产品种类最多的三个农贸市场
    m3(products)
  }

  /**
    * 获取每个省份中农产品种类最多的三个农贸市场
    */
  def m3(products:List[String]): Unit ={
    //1、过滤
    products.filter(_.split("\t").length==6)
    //2、列裁剪【省份、农贸市场、菜名】
      .map(line=>{
      val arr = line.split("\t")
      (arr(4),arr(3),arr(0))
    })
    //3、去重
      .distinct
    //4、按照省份分组
      .groupBy{
      case (province,market,name) => province
    }
    //Map(
    //   广东省 -> List( (广东省,A农贸市场,西红柿) ,(广东省,A农贸市场,大白菜),(广东省,B农贸市场,西蓝花),(广东省,C农贸市场,鲫鱼),...)
    //   ...
    // )
    //5、按照对每个省份按照农贸市场分组
      .map(x=>{
      //x = 广东省 -> List( (广东省,A农贸市场,西红柿) ,(广东省,A农贸市场,大白菜),(广东省,B农贸市场,西蓝花),(广东省,C农贸市场,鲫鱼),...)
      val province = x._1
      val groupMap = x._2.groupBy{
        case (province,market,name) => (province,market)
      }
      //Map(
      //   (广东省,A农贸市场) -> List( (广东省,A农贸市场,西红柿) ,(广东省,A农贸市场,大白菜),...)
      //   (广东省,B农贸市场) -> List( (广东省,B农贸市场,西蓝花),...)
      //   ...
      // )
      //6、统计每个省份、每个农贸市场的菜的种类数
      val marketNum = groupMap.map(y=>{
        //y = (广东省,A农贸市场) -> List( (广东省,A农贸市场,西红柿) ,(广东省,A农贸市场,大白菜),...)
        (y._1._2,y._2.size )
      }).toList
      //7、对每个省份中所有农贸市场菜的种类数进行排序,取前三
      val top3 = marketNum.sortBy{
        case (market,num) =>num
      }.reverse.take(3)

      (province,top3)
    })
    //8、结果展示
      .foreach(println(_))

  }
  /**
    * 获取农产品种类最多的三个省份
    */
  def m2(products:List[String]): Unit ={

    //1、过滤脏数
    products.filter(_.split("\t").length==6)
    //2、列裁剪[省份、菜名]
      .map(line=>{
      val arr = line.split("\t")
      (arr(4),arr(0))
    })
    //3、去重
      .distinct

    //4、按照省份分组
     // .groupBy(x=> x._1)
      .groupBy{
      case (province,name) => province
    }
    //Map(
    //   广东省 -> List( ( 广东省,西红柿 ),(广东省,胡萝卜),.. )
    //   湖南省 -> List( (湖南省,辣椒),....)
    // )
    //5、统计每个省份农产品种类数
      .map(x=>{
      //x =  广东省 -> List( ( 广东省,西红柿 ),(广东省,胡萝卜),.. )
      (x._1, x._2.size)
    })
      .toList
    //6、排序取前三
      .sortBy(x=>x._2)
      .reverse
      .take(3)
    //6、结果展示
      .foreach(println(_))
  }

  /**
    * 获取没有农贸市场的所有省份
    * @param allProvinces 全国所有省份
    * @param products 农产品
    */
  def m1(allProvinces:List[String],products:List[String] ): Unit = {

    //1、获取哪些省份有农贸市场
    //是否去重、是否过滤、是否列裁剪
    //1.1、过滤脏数据
    val filterList = products.filter(line=> line.split("\t").length==6)
    //1.2、切割得到省份[列裁剪]
    val productProvinceList = filterList.map(line=> line.split("\t")(4))
    //1.3、去重
    val distinctList = productProvinceList.distinct
    //2、与全国所有省份取差集得到没有农贸市场的省份
    allProvinces.diff(distinctList)
    //3、结果展示
      .foreach(x=>println(x))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值