##原始数据
香菜 2.80 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
大葱 2.80 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
葱头 1.60 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
大蒜 3.60 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
蒜苔 6.20 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
韭菜 5.60 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
青椒 5.20 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
茄子 5.40 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
西红柿 4.80 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
黄瓜 3.40 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
加载数据
val product=sc.textFile("file:///root/text/text/products.txt")
product.take(1)
res0: Array[String] = Array(香菜 2.80 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西汾阳)
数据清洗
出去一条数据不是六列的和重复的数据
val temp=product.distinct.filter(_.split("\t").length==6)
代码
temp.map(line=>{val x=line.split("\t");((x(4),x(3)),1)})
.reduceByKey(_+_)
.map({case((province,market),nums)=>(province,(market,nums))})
.groupByKey().mapValues(x=>x.toList.sortBy(_._2)(Ordering.Int.reverse).take(3))
.foreach(println)
对每个省内的市场蔬菜给 1
temp.map(line=>{val x=line.split("\t");((x(4),x(3)),1)}).take(3)
res9: Array[((String, String), Int)] = Array(
((内蒙古,呼和浩特市东瓦窑批发市场),1),
((北京,北京八里桥农产品中心批发市场),1),
((广西,广西柳州柳邕农副产品批发市场),1))
把每个省的市场的菜品统计
temp.map(line=>{val x=line.split("\t");((x(4),x(3)),1)}).reduceByKey((x,y)=>x+y).take(3)
res10: Array[((String, String), Int)] = Array(
((江苏,江苏建湖县水产批发市场),8),
((江苏,江苏宜兴蔬菜副食品批发市场),32),
((陕西,陕西泾阳县云阳蔬菜批发市场),25))
使用模式匹配进行类型转换
temp.map(line=>{val x=line.split("\t");((x(4),x(3)),1)})
.reduceByKey((x,y)=>x+y)
.map({case ((province,market),nums)=>(province,(market,nums))}).take(3)
res11: Array[(String, (String, Int))] = Array(
(江苏,(江苏建湖县水产批发市场,8)),
(江苏,(江苏宜兴蔬菜副食品批发市场,32)),
(陕西,(陕西泾阳县云阳蔬菜批发市场,25)))
将各个市场归到所在省
temp.map(line=>{val x=line.split("\t");((x(4),x(3)),1)})
.reduceByKey((x,y)=>x+y)
.map({case ((province,market),nums)=>(province,(market,nums))})
.groupByKey().take(3)
res15: Array[(String, Iterable[(String, Int)])] = Array(
(辽宁,CompactBuffer((辽宁朝阳市果菜批发市场,37), (辽宁阜新市瑞轩蔬菜农副产品综合批发市场,53), (大连水产品交易市场有限公司,42), (辽宁鞍山宁远农产品批发市场,46), (大连双兴批发市场,31))),
(浙江,CompactBuffer((浙江嘉兴蔬菜批发交易市场,51), (浙江义乌农贸城,40), (浙江嘉善浙北果蔬菜批发交易,35))),
(内蒙古,CompactBuffer((呼和浩特市东瓦窑批发市场,85), (内蒙呼市食全食美股份有限公司石羊桥交易中,27), (内蒙包头市场友谊蔬菜批发市场,55))))
对各个的省市场按菜品数降序排列取前三进行
temp.map(line=>{val x=line.split("\t");((x(4),x(3)),1)})
.reduceByKey(_+_)
.map({case((province,market),nums)=>(province,(market,nums))})
.groupByKey().mapValues(x=>x.toList.sortBy(_._2)(Ordering.Int.reverse).take(3))
.take(3).foreach(println)
(辽宁,List((辽宁阜新市瑞轩蔬菜农副产品综合批发市场,53), (辽宁鞍山宁远农产品批发市场,46), (大连水产品交易市场有限公司,42)))
(浙江,List((浙江嘉兴蔬菜批发交易市场,51), (浙江义乌农贸城,40), (浙江嘉善浙北果蔬菜批发交易,35)))
(内蒙古,List((呼和浩特市东瓦窑批发市场,85), (内蒙包头市场友谊蔬菜批发市场,55), (内蒙呼市食全食美股份有限公司石羊桥交易中,27)))