大数据之指标计算(4) -- 使用Spark根据dwd层dwd.fact_produce_record表,基于全量历史数据计算各设备生产一个产品的平均耗时,将结果存入clickhouse表中

目录

前言

题目:

一、读题分析

二、处理过程

三、重难点分析

总结 


前言

本题来源于全国职业技能大赛之大数据技术赛项工业数据处理赛题 - 离线数据处理 - 指标计算

注:由于个人设备问题,代码执行结果以及最后数据显示结果将不会给出。

题目:


提示:以下是本篇文章正文内容,下面案例可供参考(使用Scala语言编写) 

一、读题分析

涉及组件:Scala,Spark,clickhouse,hive

涉及知识点:

  1. 数据处理与计算
  2. clickhouse数据库的使用
  3. Hive中联合主键去重
  4. 剔除脏数据

二、处理过程

  -- 代码仅供参考 --


import org.apache.spark.sql.SparkSession

import java.util.Properties

object answer_No4 {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("MachineAvgProduceTime").master("local[*]")
      .enableHiveSupport()
      .getOrCreate()

    val df = spark.read.table("dwd.fact_produce_record").filter("ProduceCodeEndTime != '1900-01-01 00:00:00'")
    df.createOrReplaceTempView("tempView")

    //    spark.sql("select * from tempView limit 5").show()

    val resultDF = spark.sql(
      """
        |select *
        |from (
        |         SELECT distinct ProduceRecordID                                                           AS
        |         produce_record_id,
        |                         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 tempView) t1
        |where producetime > produce_per_avgtime
        |
        |""".stripMargin)
    //    resultDF.show()

 
      sendToClickHouse(resultDF,"shtd_industry.machine_produce_per_avgtime","","root","")

  }
}

-- 代码仅供参考 -- 

关于sendToClickHouse函数怎么写,设备问题,在这里就不做展示了,可以参考我写的大数据之指标计算(2) -- 使用Spark根据dwd层fact_change_record表关联dim_machine表统计每个车间中所有设备运行时长...将计算结果存入clickhouse数据库


三、重难点分析

这个题目与大数据之指标计算(3) -- 使用Spark根据dwd.fact_produce_record表,基于全量历史增加设备生产一个产品的平均耗时字段...将结果写入dws层中指定表

类似,只是存入的数据库发生了改变。

        本期为指标计算第4篇,后续应该还会出4篇。


总结 

这是一个关于使用Scala和Spark统计各设备生产一个产品的平均耗时,并将高于平均值的数据存储在clickhouse数据库中,然后在Linux命令行工具中查询前三条设备id倒序排列的数据的问题。下面是具体的要求和表结构:

  • 在dwd层fact_produce_record表中,基于全量历史数据计算各设备生产一个产品的平均耗时,其中produce_code_end_time为1900-01-01 00:00:00的数据为脏数据,需要剔除。每生产一件产品产生一条数据,produce_code_start_time字段为开始加工时间,produce_code_end_time字段为完成加工时间。
  • 将设备每个产品的耗时与该设备平均耗时作比较,保留耗时高于平均值的产品数据,得到的数据包含produce_record_id(生产记录id)、produce_machine_id(设备id)和producetime(该产品耗时,单位为秒)字段。
  • 将得到的数据写入clickhouse表machine_produce_per_avgtime中,表结构包含produce_record_id、
    produce_machine_id、producetime和produce_per_avgtime(设备生产一个产品平均耗时,单位为秒)字段。
  • 通过Linux的clickhouse命令行工具查询出前3条设备id倒序排列的数据,将SQL语句和执行结果截图粘贴到报告中。

注意:这个题目需要掌握Spark编程、clickhouse数据库以及Linux命令行工具的使用。

本篇是作者的大数据之指标计算系列之一:

        请关注我的大数据技术专栏大数据技术 作者: Eternity.Arrebol

        请关注我获取更多与大数据相关的文章Eternity.Arrebol的博客

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

约定Da于配置

你的鼓励就是我最大的动力哥们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值