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)) } }
scala中农产品经典案列
最新推荐文章于 2022-07-10 15:17:50 发布