2026江苏省职业院校技能大赛新一代信息技术赛道大数据应用开发项目样题
文章目录
- 2026江苏省职业院校技能大赛新一代信息技术赛道大数据应用开发项目样题
🔷博主介绍
致力于网络安全(漏洞挖掘、攻防实战)、Linux 内核系统(底层原理与性能调优)、区块链技术(Web3 安全与智能合约审计)、Python 语言应用(自动化攻防工具开发)、软件开发(全栈安全开发)等新一代信息技术领域的技术研究与干货分享,坚持以
极简篇幅承载硬核知识的创作理念,为技术爱好者提供高效、深度、可落地的阅读体验。CSDN认证网络安全领域优质创作者 、网络安全博客专家认证 、阿里云专家博主。
🌐各大技术专栏推荐
| 专栏名称 | 专栏介绍 |
|---|---|
| 网络安全攻防之道 | 为网络安全从业者、白帽黑客与技术爱好者打造的攻防知识阵地。深度剖析漏洞利用与防御的技术细节,实战演练渗透测试全流程,输出可落地的攻防策略,陪你在攻防对抗中持续进阶。 |
| Linux 系统运维:从底层原理到企业级实战 | 这里是 Linux 系统运维的实战修炼场:从系统初始化到高可用架构,从命令行魔术到自动化运维利器,深度拆解 CentOS/Ubuntu 在企业级业务、云原生环境中的运维密码。带你穿透系统底层逻辑,掌握性能调优、故障秒级定位、自动化脚本开发的硬核技能,进阶成为能扛住业务压力的 Linux 运维专家 |
| 【VulnHub 靶场攻防】从漏洞复现到实战渗透 | 不管你是刚入门的渗透新人,还是想强化实战能力的安全工程师,都能在这儿找到匹配的靶场练手项目。我们聚焦可复现的漏洞利用技巧,结合 Nmap、Metasploit、BurpSuite 等工具实战演示,帮你把靶场经验转化为真实渗透能力,一步步成长为能在实战中 "打怪升级" 的渗透高手 |
| 博主年度总结与收获 | 这里是旺仔 Sec 的创作成长日记!作为 CSDN 认证的网络安全优质创作者,我把每一年的技术深耕、创作思考、成长突破都浓缩在这儿 ------ 从漏洞分析的技术沉淀,到内容创作的经验复盘,再到从工程师到博主的身份进阶,每一篇总结都是 "技术探索 + 创作感悟" 的双料干货 |
🤵♂️ 个人博客主页: @旺仔Sec的博客主页
WeChat公众号:鹏璃安全✍🏻 博主身份:网络安全兼技能大赛工程师(NISP、CISP、华为IE、IP、redhat、软考等职业证书报考可找我报考!)
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注(各大技能大赛参考答案链接如下)
🖥️:软件测试技能大赛参考答案
任务A:离线数据处理(25分)
子任务一:数据抽取
编写Scala代码,使用Spark将MySQL库中表table1、table2、table3、table4、table5、table6的数据增量抽取到Hive的ods库中对应表table1、table2、table3、table4、table5、table6中。(若ods库中部分表没有数据,正常抽取即可)
1、抽取库中table1的增量数据进入Hive的ods库中表table1。根据ods.table1表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.table1命令,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
2、抽取库中table2的增量数据进入Hive的ods库中表table2。根据ods.table2表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.table2命令,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
3、抽取库中table3的增量数据进入Hive的ods库中表table3。根据ods.table3表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.table3命令,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
4、抽取库中table4的增量数据进入Hive的ods库中表table4。根据ods.table4表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.table4命令,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
5、抽取库中table5的增量数据进入Hive的ods库中表table5,根据ods.table5表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.table5命令,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
6、抽取库中table6的增量数据进入Hive的ods库中表table6,根据ods.table6表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.table6命令,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
子任务二:数据清洗
编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。(若dwd库中部分表没有数据,正常抽取即可)
1、抽取ods库中table1表中昨天的分区(子任务一生成的分区)数据,并结合dim_table1最新分区现有的数据,根据id合并数据到dwd库中dim_table1的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据operate_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,同时若operate_time为空,则用create_time填充,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写"user1"。若该条记录第一次进入数仓dwd层则dwd_insert_time、dwd_modify_time均存当前操作时间,并进行数据类型转换。若该数据在进入dwd层时发生了合并修改,则dwd_insert_time时间不变,dwd_modify_time存当前操作时间,其余列存最新的值。使用hive cli执行show partitions dwd.dim_table1命令,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
2、抽取ods库table2表中昨天的分区(子任务一生成的分区)数据,并结合dim_table2最新分区现有的数据,根据id合并数据到dwd库中dim_table2的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写"user1"。若该条数据第一次进入数仓dwd层则dwd_insert_time、dwd_modify_time均填写当前操作时间,并进行数据类型转换。若该数据在进入dwd层时发生了合并修改,则dwd_insert_time时间不变,dwd_modify_time存当前操作时间,其余列存最新的值。使用hive cli查询表dim_table2的字段id、sku_desc、dwd_insert_user、dwd_modify_time、etl_date,条件为最新分区的数据,id大于等于15且小于等于20,并且按照id升序排序,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
3、抽取ods库table3表中昨天的分区(子任务一生成的分区)数据,并结合dim_province最新分区现有的数据,根据id合并数据到dwd库中dim_province的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写"user1"。若该条数据第一次进入数仓dwd层则dwd_insert_time、dwd_modify_time均填写当前操作时间,并进行数据类型转换。若该数据在进入dwd层时发生了合并修改,则dwd_insert_time时间不变,dwd_modify_time存当前操作时间,其余列存最新的值。使用hive cli在表dwd.dim_province最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
4、抽取ods库table4表中昨天的分区(子任务一生成的分区)数据,并结合dim_region最新分区现有的数据,根据id合并数据到dwd库中dim_region的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写"user1"。若该条数据第一次进入数仓dwd层则dwd_insert_time、dwd_modify_time均填写当前操作时间,并进行数据类型转换。若该数据在进入dwd层时发生了合并修改,则dwd_insert_time时间不变,dwd_modify_time存当前操作时间,其余列存最新的值。使用hive cli在表dwd.dim_region最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
5、将ods库中table5表昨天的分区(子任务一生成的分区)数据抽取到dwd库中fact_table5的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,同时若operate_time为空,则用create_time填充,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写"user1",dwd_insert_time、dwd_modify_time均填写当前操作时间,并进行数据类型转换。使用hive cli执行show partitions dwd.fact_table5命令,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
6、将ods库中table6表昨天的分区(子任务一中生成的分区)数据抽取到dwd库中fact_table6的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写"user1",dwd_insert_time、dwd_modify_time均填写当前操作时间,并进行数据类型转换。使用hive cli执行show partitions dwd.fact_table6命令,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
子任务三:指标计算
编写Scala代码,使用Spark计算相关指标。
注:在指标计算中,不考虑订单信息表中order_status字段的值,将所有订单视为有效订单。计算订单金额或订单总金额时只使用final_total_amount字段。需注意dwd所有的维表取最新的分区。
1、本任务基于以下2小题完成,使用Azkaban完成第2题任务代码的调度。工作流要求,使用shell输出"开始"作为工作流的第一个job(job1),2题任务为串行任务且它们依赖job1的完成(命名为job2),job2完成之后使用shell输出"结束"作为工作流的最后一个job(endjob),endjob依赖job2,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
2、根据dwd层表统计每个省份、每个地区、每个月下单的数量和下单的总金额,存入MySQL数据库shtd_result的provinceeverymonth表中(表结构如下),然后在Linux的MySQL命令行中根据订单总数、订单总金额、省份表主键均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
| 字段 | 类型 | 中文含义 | 备注 |
|---|---|---|---|
| provinceid | int | 省份表主键 | |
| provincename | text | 省份名称 | |
| regionid | int | 地区表主键 | |
| regionname | text | 地区名称 | |
| totalconsumption | double | 订单总金额 | 当月订单总金额 |
| totalorder | int | 订单总数 | 当月订单总数 |
| year | int | 年 | 订单产生的年 |
| month | int | 月 | 订单产生的月 |
任务B:数据挖掘(10分)
子任务一:特征工程
剔除订单信息表与订单详细信息表中用户id与商品id不存在现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。
1、根据Hive的dwd库中相关表或MySQL中中相关表(table6、table2),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,若与多个用户购买的商品种类相同,则输出结果按照用户id升序排序,输出格式如下,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
结果格式如下:
-------------------相同种类前10的id结果展示为:--------------------
1,2,901,4,5,21,32,91,14,52
2、根据Hive的dwd库中相关表或MySQL中中相关商品表(table2),获取id、spu_id、price、weight、tm_id、category3_id 这六个字段并进行数据预处理,对price、weight进行规范化(StandardScaler)处理,对spu_id、tm_id、category3_id进行one-hot编码处理(若该商品属于该品牌则置为1,否则置为0),并按照id进行升序排序,在集群中输出第一条数据前10列(无需展示字段名),将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
| 字段 | 类型 | 中文含义 | 备注 |
|---|---|---|---|
| id | double | 主键 | |
| price | double | 价格 | |
| weight | double | 重量 | |
| spu_id#1 | double | spu_id 1 | 若属于该spu_id,则内容为1否则为0 |
| spu_id#2 | double | spu_id 2 | 若属于该spu_id,则内容为1否则为0 |
| ... | double | ||
| tm_id#1 | double | 品牌1 | 若属于该品牌,则内容为1否则为0 |
| tm_id#2 | double | 品牌2 | 若属于该品牌,则内容为1否则为0 |
| ...... | double | ||
| category3_id#1 | double | 分类级别3 1 | 若属于该分类级别3,则内容为1否则为0 |
| category3_id#2 | double | 分类级别3 2 | 若属于该分类级别3,则内容为1否则为0 |
| ...... |
结果格式如下:
--------------------第一条数据前10列结果展示为:---------------------
1.0,0.892346,1.72568,0.0,0.0,0.0,0.0,1.0,0.0,0.0
子任务二:推荐系统
1、根据子任务一的结果,计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户id(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),并根据Hive的dwd库中相关表或MySQL数据库中相关表,获取到这10位用户已购买过的商品,并剔除用户6708已购买的商品,通过计算这10位用户已购买的商品(剔除用户6708已购买的商品)与用户6708已购买的商品数据集中商品的余弦相似度累加再求均值,输出均值前5商品id作为推荐使用,将执行结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
结果格式如下:
------------------------推荐Top5结果如下------------------------
相似度top1(商品id:1,平均相似度:0.983456)
相似度top2(商品id:71,平均相似度:0.782672)
相似度top3(商品id:22,平均相似度:0.7635246)
相似度top4(商品id:351,平均相似度:0.7335748)
相似度top5(商品id:14,平均相似度:0.522356)
任务C:数据采集与实时计算(20分)
子任务一:实时数据采集
1、在主节点使用Flume采集实时数据生成器10050端口的socket数据,将数据存入到Kafka的Topic中(Topic名称为order,分区数为4),使用Kafka自带的消费者消费order(Topic)中的数据,将前2条数据的结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
2、采用多路复用模式,Flume接收数据注入kafka 的同时,将数据备份到HDFS目录/user/test/flumebackup下,将查看备份目录下的第一个文件的前2条数据的命令与结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
子任务二:使用Flink处理Kafka中的数据
编写Scala代码,使用Flink消费Kafka中Topic为order的数据并进行相应的数据统计计算(订单信息对应表结构table5,订单详细信息对应表结构table6(来源类型和来源编号这两个字段不考虑,所以在实时数据中不会出现),同时计算中使用table5或table6表中create_time或operate_time取两者中值较大者作为EventTime,若operate_time为空值或无此列,则使用create_time填充,允许数据延迟5s,订单状态分别为1001:创建订单、1002:支付订单、1003:取消订单、1004:完成订单、1005:申请退回、1006:退回完成。另外对于数据结果展示时,不要采用例如:1.9786518E7的科学计数法)。
1、使用Flink消费Kafka中的数据,统计商城实时订单实收金额(需要考虑订单状态,若有取消订单、申请退回、退回完成则不计入订单实收金额,其他状态的则累加),将key设置成totalprice存入Redis中。使用redis cli以get key方式获取totalprice值,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;
2、在任务1进行的同时,使用侧边流,监控若发现order_status字段为取消订单,将数据存入MySQL数据库shtd_result的table5表中,然后在Linux的MySQL命令行中根据id降序排序,查询列id、consignee、consignee_tel、final_total_amount、feight_fee,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
任务D:数据可视化(20分)
子任务一:用柱状图展示消费额最高的省份
编写Vue工程代码,根据接口,用柱状图展示2020年消费额最高的5个省份,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。
子任务二:用柱状图展示消费额最低的省份
编写Vue工程代码,根据接口,用柱状图展示2020年消费额最低的5个省份,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。
子任务三:用折线图展示每年上架商品数量变化
编写Vue工程代码,根据接口,用折线图展示每年上架商品数量的变化情况,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。
子任务四:用条形图展示平均消费额最高的省份
编写Vue工程代码,根据接口,用条形图展示2020年平均消费额(四舍五入保留两位小数)最高的5个省份,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。
任务E:向量数据库(10分)
子任务一:根据给定文档,进行文档清洗与切分,向量化及元数据标注等操作
1.编写 Python 代码,实现读取路径为xxx.pdf的pdf 文件,按自然段落切分且每段不超过 600 字符、段与段之间保留 120 字符重叠的完整预处理流程,最终输出一个每个元素为切分后文本块的列表,每个元素是一个切分后的文本块。将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
2.使用 sentence-transformers 库调用 BAAI/bge-m3 模型,对切分后的 20 个文本块进行批量向量化得到稠密向量,要求向量维度为 512、全部做 L2 归一化,最终输出形状为 (10, 512) 的 numpy 数组。将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
3.使用 pymilvus,在已存在的名为 rag_docs 的集合中,以批量插入的方式插入 10 条数据,每条数据需包含自增或手动递增的主键 id、512 维向量 vector,以及 doc_id、chunk_idx、create_time、source 标量字段,写出完整的插入代码。将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
子任务二:根据任务进行向量相似度查询
对一个新问题 "Milvus 如何支持混合搜索?",使用 BAAI/bge-m3 模型生成查询向量,在 rag_docs 集合中以余弦为相似度度量执行 TOP-3 向量相似度搜索,且仅返回 create_time 在 2025 年之后的文档,编写实现该过程的代码。将编写的代码复制粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下。
子任务三:根据任务进行混合搜索
假设 rag_docs 集合中存在 dense_vector 和 sparse_vector 两个向量字段,对查询语句 "向量数据库 混合搜索" 同时生成稠密和稀疏向量,设置 dense 权重 0.5、sparse 权重 0.1,实现一次加权混合搜索,取 TOP-5 结果并按加权分数重新排序后返回,编写对应的实现代码。将代码复制粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下,将结果截图粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下,
任务F:综合分析(10分)
子任务一:MySQL数据库事务
MySQL是工业生产中常运用的开源数据库,其相关事务在实际操作中十分重要,请列出MySQL数据库的四大特性以及事务得隔离级别。将结果粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
子任务二:Flink的反压机制
在使用Flink进行实时计算时通常出现反压问题,为确定就具体问题所在,我们通常需要查看Flink的Web界面的Metrics菜单栏,其中可以添加关注的度量(指标)来确定是上游还是下游出现反压,我们所添加度量有哪些。将结果粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;
子任务三:Spark执行计划
Spark 执行计划是 Spark 根据输入的 SQL语句或者算子,经过优化器生成的一个步骤序列,即将 SQL语句等转换为一系列可供操作系统可执行步骤从而对数据进行处理,从而实现 SQL语句或算子的最终的功能。将结果粘贴至客户端桌面【Release提交结果.docx】中对应的任务序号下;