热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spark案例解析(全国农产品市场与省份)

需求(一)数据描述1、数据参数该数据每日进行采集汇总。数据范围涵盖全国主要省份(港澳台西藏海南暂无数据)的180的大型农产品批发市场,3

需求

(一) 数据描述
1、数据参数
该数据每日进行采集汇总。数据范围涵盖全国主要省份(港澳台西藏海南暂无数
据)的 180+的大型农产品批发市场,380+的农产品品类(由于季节性和地域性
等特点,每日的数据中不一定会涵盖全部的农产品品类)。
2、数据类型
在这里插入图片描述
(二)功能需求
1、农产品市场个数统计

  1. 统计每个省份的农产品市场总数
  2. 统计没有农产品市场的省份有哪些

2、农产品种类统计

  1. 根据农产品类型数量,统计排名前 3 名的省份
  2. 根据农产品类型数量,统计每个省份排名前 3 名的农产品市场

3、价格区间统计,

  1. 计算山西省的每种农产品的价格波动趋势,即计算每天价格均值。
  2. 某种农产品的价格均值计算公式:
    PAVG = (PM1+PM2+…+PMn-max§-min§)/(N-2)
    其中,P 表示价格,Mn 表示 market,即农产品市场。PM1 表示 M1 农产品
    市场的该产品价格,max§表示价格最大值,min§价格最小值。

数据展示

allprovince.txt

河北
山西
辽宁
吉林
黑龙江
江苏
浙江
安徽
福建
江西
山东
河南
...

product.txt

生菜 2.00 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
芹菜 2.40 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳
菜花 3.80 2018/1/1 北京朝阳区大洋路综合市场 北京 朝阳
生姜 10.00 2018/1/1 北京朝阳区大洋路综合市场 北京 朝阳
山药 8.00 2018/1/1 北京朝阳区大洋路综合市场 北京 朝阳
芋头 5.50 2018/1/1 北京朝阳区大洋路综合市场 北京 朝阳
小葱 1.50 2018/1/1 北京朝阳区大洋路综合市场 北京 朝阳
...

用RDD算子解法:

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.junit/*** Description :* CreateTime : 2019/10/916:41** @author TuYouXian* @since JDK1.8*/
class Test {val sc = new SparkContext(new SparkConf().setMaster("local[4]").setAppName("test"))val source: RDD[String] = sc.textFile("data/product.txt")/*** 统计每个省份农产品批次市场个数* 已有数据:省份 市场名称* 目标数据:省份 市场数量*/@junit.Testdef product1(): Unit ={//1、读取数据//2、去重、过滤、列裁剪val result: collection.Map[String, Long] = source.filter(_.split("\t").size >= 5).map(line =>{val arr: Array[String] = line.split("\t")val province = arr(4)val product = arr(3)province-> product}).distinct()//3、数据处理//.map(item => item._1 -> 1).reduceByKey(_+_).collect()//.groupByKey().map(item => item._1->item._2.size).countByKey()//4、结果展示println(result)}/*** 统计没有农产品的省份有哪些* 已知数据:有农产品省份* 目标数据:无农产品省份*/@junit.Testdef product2(): Unit ={val allprovinces = sc.textFile("data/allprovince.txt")val provinces = source.filter(_.split("\t").size >= 5).map(line => {val arr = line.split("\t")val province = arr(4)province}).distinct()val noprovinces: Array[String] = allprovinces.subtract(provinces).collect()println(noprovinces.toBuffer)}/*** 根据农产品的类型数量,统计排名前三的省份* 已有数据:农产品类型,省份* 中间数据:农产品类型数量,省份* 目标数据:排名前三省份*/@junit.Testdef product3(): Unit ={val result: Array[(String, Int)] = source.filter(_.split("\t").size >= 5).map(line => {val arr: Array[String] = line.split("\t")val province = arr(4)val productType = arr(0)province -> productType}).distinct().groupByKey().map(item => item._1 -> item._2.size).sortBy(_._2, false).take(3)println(result.toBuffer)}/*** 根据农产品类型数量,统计每个省份排名前三的批发市场* 已有数据:农产品类型,省份,批发市场* 中间数据:(省份,((省份,批发市场),农产品类型数量))* 目标数据:(省份,批发市场,农产品类型数量)前三数据* 也就是要根据省份分区,求每个分区的前三*/@junit.Testdef product4(): Unit ={source.filter(_.split("\t").size >= 5).map(line =>{val arr = line.split("\t")val province = arr(4)val product = arr(3)val productType = arr(0)((province,product),productType)}).distinct().map(item => item._1 -> 1).reduceByKey(_+_).groupBy(_._1._1)//(省份,[((省份,批发市场),农产品类型数量),((省份,批发市场),农产品类型数量)]).flatMap(item =>{//需要压扁操作val province = item._1//val arr = item._2.toArrayval arr = item._2.toBufferarr.sortBy(_._2).reverse.take(3).map(item => (province,item._1._2,item._2))}).foreach(println(_))}/*** 计算山西省的每种农产品的价格波动趋势,即计算每天价格均值* PAVG = (PM1+PM2+...+PMn-max(P)-min(P))/(N-2)* 其中,P 表示价格,Mn 表示 market,即农产品市场。PM1 表示 M1 农产品* 市场的该产品价格,max(P)表示价格最大值,min(P)价格最小值。* 已知数据:农产品类型,批发价格* 目标数据:农产品类型,价格均值* 注意有部分农产品的数量并不能满足上面公式可能会出NAN,无穷数等结果*/@junit.Testdef product5(): Unit ={//1、过滤 去重 列裁剪source.filter(item=> item.split("\t").size>=5 && item.split("\t")(4)=="山西").map(item=>{val arr = item.split("\t")val name = arr(0)val price = arr(1).toDouble//避免后续出现1/3 = 0的情况(name,price)})//2、分组//(面粉,CompactBuffer(3.44, 2.9, 3.44))//(大葱,CompactBuffer(2.8, 2.6, 2.4, 3.0, 3.1, 2.8, 3.0, 2.5)).groupByKey()//.foreach(println(_)).map(item=>{val data: Iterable[Double] = item._2val maxprice = data.maxval minprice = data.minval sumPrice = data.sumval size = data.sizeval avgPrice = (sumPrice-maxprice-minprice)/(size-2)(item._1,avgPrice)})//3、计算平均价格.foreach(println(_))//4、结果}
}

SparkSql解法:


推荐阅读
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • JavaScript中属性节点的类型及应用
    本文深入探讨了JavaScript中属性节点的不同类型及其在实际开发中的应用,帮助开发者更好地理解和处理HTML元素的属性。通过具体的案例和代码示例,我们将详细解析如何操作这些属性节点。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍了如何在ECharts中使用线性渐变色,通过echarts.graphic.LinearGradient方法实现。文章不仅提供了完整的代码示例,还解释了各个参数的具体含义及其应用场景。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
author-avatar
NOYOKI要跑偏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有