全国职业院校技能大赛-大数据 离线数据处理模块-指标计算_国赛离线数据处理指标计算(2)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

2. 编写scala代码,使用Spark根据dwd层的fact_produce_record表,基于全量历史增加设备生产一个产品的平均耗时字段(produce_per_avgtime),produce_code_end_time值为1900-01-01 00:00:00的数据为脏数据,需要剔除,并以produce_record_id和ProduceMachineID为联合主键进行去重(注:fact_produce_record表中,一条数据代表加工一个产品,produce_code_start_time字段为开始加工时间,produce_code_end_time字段为完成加工时间),将得到的数据提取下表所需字段然后写入dws层的表machine_produce_per_avgtime中,然后使用hive cli根据设备id降序排序查询前3条数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;

machine_produce_per_avgtime

字段类型中文含义备注
produce_record_idint生产记录id每生产一件产品产生一条数据
produce_machine_idint设备id
producetimeint该产品耗时
produce_per_avgtimeint设备生产一个产品平均耗时单位:秒

执行代码

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object SparkReadDWDWriteDWS {
  def main(args: Array[String]): Unit = {

    // 创建sparkSession对象
    val conf = new SparkConf().setMaster("local[*]").setAppName("sparkSession")
    val spark: SparkSession = SparkSession.builder()
      .config(conf)
      .enableHiveSupport()
      .getOrCreate()

    // 启动动态分区
    spark.conf.set("hive.exec.dynamic.partition.mode", "nonstrict")
    // 关闭日志打印
    spark.sparkContext.setLogLevel("OFF")

    // 读取数据并剔除脏数据
    val df = spark.read
      .table("dwd.fact_produce_record")
      .filter("ProduceCodeEndTime != '1900-01-01 00:00:00'")
    df.createOrReplaceTempView("tempView")

    // 将查询的结果作为独立的表保存
    // 在group by 中进行联合主键去重
    // 如果使用group by,那么在查询语句中只能显示分组字段和聚合函数
    // 根据设备id进行分组,计算每个设备生产一个设备的平均时间
    val resultDF = spark.sql(
      """
        |SELECT
        |       t1.ProduceRecordID                                                           AS produce_record_id,
        |       t1.ProduceMachineID                                                          AS produce_machine_id,
        |       unix_timestamp(ProduceCodeEndTime) - unix_timestamp(ProduceCodeStartTime)    AS producetime,
        |       AVG(unix_timestamp(ProduceCodeEndTime) - unix_timestamp(ProduceCodeStartTime))
        |           OVER (PARTITION BY ProduceMachineID)                                     AS produce_per_avgtime
        |FROM (
        | SELECT
        |        ProduceRecordID,
        |        ProduceMachineID
        | FROM tempView
        | GROUP BY ProduceRecordID,ProduceMachineID
        | ) t1
        | LEFT JOIN (
        |     SELECT
        |         ProduceCodeStartTime,
        |         ProduceCodeEndTime,
        |         ProduceRecordID,
        |         ProduceMachineID,
        |     FROM tempView
        | ) t2 ON t1.ProduceRecordID = t2.ProduceRecordID
        | AND t1.ProduceMachineID = t2.ProduceMachineID
        |""".stripMargin) // 以ProduceRecordID,ProduceMachineID为联合主键进行去重
    resultDF.show()
    
    // 将数据保存到dws库中的machine_produce_per_avgtime中
    resultDF.write
      .mode("overwrite")
      .saveAsTable("dws.machine_produce_per_avgtime")

    // 使用hive cli根据设备id降序排序查询前3条数据
    // select * from dws.machine_produce_per_avgtime order by id desc limit 3;

    spark.close()
  }
}

3.  编写scala代码,使用Spark根据dws层的machine_produce_per_avgtime表,获取各设备生产耗时最长的两个产品的用时,将计算结果存入MySQL数据库shtd_industry的machine_produce_timetop2表中(表结构如下),然后在Linux的MySQL命令行中根据设备id降序排序,查询出前2条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;

字段类型中文含义备注
machine_idint设备id
first_timeint耗时最长
second_timeint耗时次长
package com.atguigu.connecttest.writedws

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}

object SparkReadDWDWriteDWS2 {
  def main(args: Array[String]): Unit = {

    // TODO 准备环境
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("spark")
    val spark = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()
    // 启动动态分区
    spark.conf.set("hive.exec.dynamic.partition.mode", "nonstrict")
    // 关闭打印日志
    spark.sparkContext.setLogLevel("OFF")

    val df: DataFrame = spark.read.table("dws.machine_produce_per_avgtime")
    // 创建临时表
    df.createOrReplaceTempView("tempView")

    // 这里的数据是基于第2题的结果的
    val hiveDF: DataFrame = spark.sql(
      """
        | select
        | machine_id,
        | if(rk = 1, producetime, null) first_time,
        | if(rk = 2, producetime, null) second_time
        | from (
        |   select
        |     machine_id,
        |     producetime,
        |     rank() over(partition by machine_id order by producetime desc) rk
        |   from tempView
        | ) t
        |""".stripMargin)
    // rank排名函数会可以直接根据machinc_id进行分区排序,因此可以不考虑手动通过group by分区


    // 将计算结果存入mysql
    hiveDF.write
      .format("jdbc")
      .mode(SaveMode.Append)
      .option("Driver", "com.mysql.jdbc.Driver")
      .option("url", "jdbc:mysql://hadoop102:3306/shtd_industry")
      .option("user", "root")
      .option("password", "000000")
      .option("dbtable", "machine_produce_timetop2")


![img](https://img-blog.csdnimg.cn/img_convert/dd5813bd3069337b4e90d0ff4e83339c.png)
![img](https://img-blog.csdnimg.cn/img_convert/f354ecd7cfb8f64b0c0621a84b367747.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模块C主要涉及网络系统的安全管理和故障处理。在网络系统管理过程中,安全管理是至关重要的一环。首先,我们需要建立完善的网络安全策略,包括网络设备、系统和应用程序的安全设置以及规范用户权限和访问控制。其次,我们应定期进行漏洞扫描和安全评估,及时发现和修复网络系统中的潜在安全风险。 网络系统故障处理是另一个重要方面。故障可能包括网络连接故障、服务器故障等。首先,我们需要快速排查故障的原因,可以通过检查网络设备状态、网络配置和服务运行状况等方式进行。其次,我们需及时采取紧急措施,如重启故障设备、调整网络配置等,来恢复网络系统的正常工作。同时,我们应记录故障处理过程和结果,以便后续分析和改进。 为了有效管理网络系统,我们还需进行网络性能监控和优化。通过监控网络设备和服务的运行状况,我们可以及时发现性能问题,并采取相应措施进行优化。例如,我们可以进行带宽管理,合理分配网络资源,避免网络拥堵;同时,我们还需定期升级网络设备和应用程序,以提升系统的性能和稳定性。 综上所述,模块C主要涉及网络系统的安全管理、故障处理和性能优化。通过建立完善的安全策略,及时处理故障,并进行性能监控和优化,我们可以保证网络系统的安全稳定运行,提高网络管理员的工作效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值