目录
前言
本题来源于全国职业技能大赛之大数据技术赛项工业数据处理赛题 - 离线数据处理 - 指标计算
注:由于个人设备问题,代码执行结果以及最后数据显示结果将不会给出。
题目:
提示:以下是本篇文章正文内容,下面案例可供参考(使用Scala语言编写)
一、读题分析
涉及组件:Scala,Spark,clickhouse,hive
涉及知识点:
- 数据处理与计算
- clickhouse数据库的使用
- Hive中联合主键去重
- 剔除脏数据
二、处理过程
-- 代码仅供参考 --
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的博客