先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
正文
| 字段 | 类型 | 中文含义 | 备注 |
| produce_record_id | int | 生产记录id | 每生产一件产品产生一条数据 |
| produce_machine_id | int | 设备id | |
| producetime | int | 该产品耗时 | |
| produce_per_avgtime | int | 设备生产一个产品平均耗时 | 单位:秒 |
执行代码
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_id | int | 设备id | |
first_time | int | 耗时最长 | |
second_time | int | 耗时次长 |
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")
.save()
// TODO 关闭连接
spark.close()
}
}
在Linux的MySQL命令行中根据设备id降序排序,查询出前2条
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
[外链图片转存中…(img-C7ze993D-1713376553997)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!