• 大数据技能大赛(高职组)答案


    任务C:数据挖掘(10分)

    所有模块都有,不是白嫖!!有需要可以联系我

    环境说明:

    服务端登录地址详见各任务服务端说明。
    补充说明:各节点可通过Asbru工具或SSH客户端进行SSH访问;
    主节点MySQL数据库用户名/密码:root/123456(已配置远程连接);
    Spark任务在Yarn上用Client运行,方便观察日志。
    该任务均使用Scala编写,利用Spark相关库完成。

    子任务一:特征工程

    剔除订单信息表与订单详细信息表中用户id与商品id不存在于现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。
    1、据Hudi的dwd_ds_hudi库中相关表或MySQL数据库shtd_store中订单相关表(order_detail、order_info、sku_info),对用户购买过的商品进行去重,将其转换为以下格式:第一列为用户id mapping,第二列为用户购买过的商品id mapping,按照user_id与sku_id进行升序排序,输出前5行,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下;
    字段 类型 中文含义 备注
    user_id int 用户id的mapping对应键
    sku_id int 商品id的mapping对应键
    提示:

    Mapping操作:例如用户id:1、4、7、8、9,则做完mapping操作转为字典类型,键0对应用户id

    1,键1对应用户id 4,以此类推
    2、根据第1小题的结果,对其进行聚合,其中对sku_id进行one-hot转换,将其转换为以下格式矩阵:第一列为用户id,其余列名为商品id,按照用户id进行升序排序,展示矩阵第一行前5列数据,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。
    字段 类型 中文含义 备注
    user_id double 客户key
    sku_id0 double 用户是否购买过商品1 若用户购买过该商品,则值为1,否则为0
    sku_id1 double 用户是否购买过商品2 若用户购买过该商品,则值为1,否则为0
    sku_id2 double 用户是否购买过商品3 若用户购买过该商品,则值为1,否则为0

    子任务二:推荐系统

    1、根据子任务一的结果,对其进行SVD分解,对数据进行降维保留前5个奇异值信息,根据该用户已购买的商品分别与未购买的商品计算余弦相似度再进行累加求均值,将均值最大的5件商品id进行输出作为推荐使用。将输出结果截图粘贴至客户端桌面【Release\任务C提交结果.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)

    任务D:数据采集与实时计算(20分)

    环境说明:
    服务端登录地址详见各任务服务端说明。
    补充说明:各节点可通过Asbru工具或SSH客户端进行SSH访问;
    Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。

    子任务一:实时数据采集

    1、在主节点使用Flume采集实时数据生成器10050端口的socket数据,将数据存入到Kafka的Topic中(Topic名称为order,分区数为4),使用Kafka自带的消费者消费order(Topic)中的数据,将前2条数据的结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;

    2、采用多路复用模式,Flume接收数据注入kafka 的同时,将数据备份到HDFS目录/user/test/flumebackup下,将查看备份目录下的第一个文件的前2条数据的命令与结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。
    子任务二:使用Flink处理Kafka中的数据
    编写Scala代码,使用Flink消费Kafka中Topic为order的数据并进行相应的数据统计计算(订单信息对应表结构order_info,订单详细信息对应表结构order_detail(来源类型和来源编号这两个字段不考虑,所以在实时数据中不会出现),同时计算中使用order_info或order_detail表中create_time或operate_time取两者中值较大者作为EventTime,若operate_time为空值或无此列,则使用create_time填充,允许数据延迟5s,订单状态order_status分别为1001:创建订单、1002:支付订单、1003:取消订单、1004:完成订单、1005:申请退回、1006:退回完成。另外对于数据结果展示时,不要采用例如:1.9786518E7的科学计数法)。
    1、使用Flink消费Kafka中的数据,统计商城实时订单数量(需要考虑订单状态,若有取消订单、申请退回、退回完成则不计入订单数量,其他状态则累加),将key设置成totalcount存入Redis中。使用redis cli以get key方式获取totalcount值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;

    2、在任务1进行的同时,使用侧边流,使用Flink消费Kafka中的订单详细信息的数据,实时统计商城中销售量前3的商品(不考虑订单状态,不考虑打折),将key设置成top3itemamount存入Redis中(value使用String数据格式,value为前3的商品信息并且外层用[]包裹,其中按排序依次存放商品id:销售量,并用逗号分割)。使用redis cli以get key方式获取top3itemamount值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;
    示例如下:
    top3itemamount:[1:700,42:500,41:100]

    3、在任务1进行的同时,使用侧边流,使用Flink消费Kafka中的订单详细信息的数据,实时统计商城中销售额前3的商品(不考虑订单状态,不考虑打折,销售额为order_price*sku_num),将key设置成top3itemconsumption存入Redis中(value使用String数据格式,value为前3的商品信息并且外层用[]包裹,其中按排序依次存放商品id:销售额,并用逗号分割)。使用redis cli以get key方式获取top3itemconsumption值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面。
    示例如下:
    top3itemconsumption:[1:10020.2,42:4540.0,12:540]

  • 相关阅读:
    【Go】excelize库实现excel导入导出封装(一),自定义导出样式、隔行背景色、自适应行高、动态导出指定列、动态更改表头
    并发编程之临界区\阻塞\非阻塞\死锁\饥饿\活锁
    【SA8295P 源码分析】100 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态
    数字IC前端学习笔记:数字乘法器的优化设计(进位保留乘法器)
    Ubuntu安装Python环境(使用VSCode)
    80.每日一练:移除元素(力扣)
    代码随想录算法训练营第五十一天 |309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、总结
    一种高效率低成本的流量回放平台实践
    本周SQL优化实战分享
    pytest 结合logging输出日志保存至文件
  • 原文地址:https://blog.csdn.net/weixin_54412689/article/details/134562668