版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验8-9大数据采集与预处理一、实验目的掌握HDFS、Hive、SparkSQL、Zeppelin、Sqoop等相关大数据组件安装和配置方法二、数据处理流程1.日志数据文件要处理的数据都是一些文本日志,例如:用户打车的日志文件。b05b0034cba34ad4a707b4e67f681c71109.348825,36.068516,陕西省,延安市,78.2,男,软件工程,70后,4,1,2020-4-1220:54,0,,2020-4-1220:0623b60a8ff11342fcadab3a397356ba33110.231895,36.426178,陕西省,延安市,19.5,女,金融,80后,3,0,,0,,2020-4-124:041db33366c0e84f248ade1efba0bb9227115.23596,38.652724,河北省,保定市,13.7,男,金融,90后,7,1,2020-4-1210:10,0,,2020-4-120:2946cfb3c4b94a470792ace0efdd2df11a113.837765,34.743035,河南省,郑州市,41.9,女,新能源,00后,9,0,,0,,2020-4-121:15878f401c9ca6437585ce1187053c220a113.837765,31.650084,湖北省,随州市,35.6,男,教育和培训,80后,8,1,2020-4-121:06,0,,2020-4-124:3544165cf545734bf6a114aa641479e828109.275236,34.255614,陕西省,西安市,30.8,女,O2O,90后,8,0,,12020-4-125:072.用户打车订单日志字段每当用户发起打车时,后台系统都会产生一条日志数据,并形成文件。b05b0034cba34ad4a707b4e67f681c71109.348825,36.068516,陕西省,延安市,78.2,男,软件工程,70后,4,1,2020-4-1220:54,0,,2020-4-1220:063.用户取消订单日志当用户取消订单时,也会在系统后台产生一条日志。用户需求选择取消订单的原因。ae5c114b4c014634840c24373bcb83bb103.719252,26.314714,甘肃省,庆阳市,19.5,男,新能源,80后,4,2022-6-238:444.用户支付日志字段用户点击确认支付后,系统后台会将用户的支持信息保存为一条日志。c182c4751bbb412e853e834803801352,b05b0034cba34ad4a707b4e67f681c71,109.348825,36.068516,陕西省,宝鸡市,124.5,72.3,8,44.6,0,,1,9.2,2022-6-2316:375.用户评价日志字段用户评价日志:用户点击提交评价后,系统后台也会产生一条日志。三、实训内容步骤1.构建数据仓库目标:分析用户打车的订单,进行各类的指标计算(指标,例如:订单的总数、订单的总支付金额等等)。将日志数据上传到HDFS保存下来,每天都可以进行上传,HDFS可以保存海量的数据。将HDFS中的数据文件,对应到Hive的表中。业务系统的日志数据不一定是能够直接进行分析,例如:需要分析不同时段的订单占比,凌晨有多少订单、早上有多少订单、上午有多少订单等。但是,我们发现,原始的日志文件中,并没有区分该订单的是哪个时间段的字段,对日志文件的原始数据进行预处理,才能进行分析。考虑几类数据:原始日志数据(业务系统中保存的日志文件数据)预处理后的数据分析结果数据这些数据通过Hive来进行处理,将数据映射为一张张的表,然后就可以通过编写HQL来处理数据了,简单、快捷、高效。为了区分以上这些数据,将这些数据对应的表分别保存在不同的数据库中。接下来就要创建三个数据库,分别用来管理每一层的表数据--创建ods库Createdatabaseifnotexistsods_didi;--创建dw库Createdatabaseifnotexistsdw_didi;--创建app库Createdatabaseifnotexistsapp_didi;在ods数据库中创建四种表单创建用户打车订单表--创建用户订单表结构createtableifnotexistsods_didi.t_user_order(orderIdstringcomment'订单id’,telephonestringcomment'打车用户手机’,lngstringcomment'用户发起打车的经度’,latstringcomment'用户发起打车的纬度’,provincestringcomment'所在省份’,citystringcomment'所在城市’,es_moneydoublecomment'预估打车费用’,genderstringcomment'用户信息-性别’,professionstringcomment'用户信息-行业’,age_rangestringcomment'年龄段(70后、80后、...)’,tipdoublecomment'小费’,subscribeintegercomment'是否预约(0-非预约、1-预约)’,sub_timestringcomment'预约时间’,is_agentintegercomment'是否代叫(0-本人、1-代叫)’,agent_telephonestringcomment'预约人手机’,order_timestringcomment'预约时间’)partitionedby(dtstringcomment'时间分区’)ROWFORMATDELIMITEDFIELDSTERMINATEDBY',';创建取消订单表createtableifnotexistsods_didi.t_user_cancel_order(orderIdstringcomment'订单ID’,cstm_telephonestringcomment'客户联系电话’,lngstringcomment'取消订单的经度’,latstringcomment'取消订单的纬度’,provincestringcomment'所在省份’,citystringcomment'所在城市’,es_distancedoublecomment'预估距离’,genderstringcomment'性别’,professionstringcomment'行业’,age_rangestringcomment'年龄段’,reasonintegercomment'取消订单原因(1-选择了其他交通方式、2-与司机达成一致,取消订单、3-投诉司机没来接我、4-已不需要用车、5-无理由取消订单)’,cancel_timestringcomment'取消时间’)partitionedby(dtstringcomment'时间分区’)ROWFORMATDELIMITEDFIELDSTERMINATEDBY',';创建订单表支付表createtableifnotexistsods_didi.t_user_pay_order(idstringcomment'支付订单ID’,orderIdstringcomment'订单ID’,lngstringcomment'目的地的经度(支付地址)’,latstringcomment'目的地的纬度(支付地址)’,provincestringcomment'省份’,citystringcomment'城市’,total_moneydoublecomment'车费总价’,real_pay_moneydoublecomment'实际支付总额’,passenger_additional_moneydoublecomment'乘客额外加价’,base_moneydoublecomment'车费合计’,has_couponintegercomment'是否使用优惠券(0-不使用、1-使用)’,coupon_totaldoublecomment'优惠券合计’,pay_wayintegercomment'支付方式(0-微信支付、1-支付宝支付、3-QQ钱包支付、4-一网通银行卡支付)',mileagedoublecomment'里程(单位公里)’,pay_timestringcomment'支付时间’)partitionedby(dtstringcomment'时间分区’)ROWFORMATDELIMITEDFIELDSTERMINATEDBY',';创建用户评价表createtableifnotexistsods_didi.t_user_evaluate(idstringcomment'评价日志唯一ID’,orderIdstringcomment'订单ID’,passenger_telephonestringcomment'用户电话’,passenger_provincestringcomment'用户所在省份’,passenger_citystringcomment'用户所在城市’,eva_levelintegercomment'评价等级(1-一颗星、...5-五星)’,eva_timestringcomment'评价时间’)partitionedby(dtstringcomment'时间分区’)ROWFORMATDELIMITEDFIELDSTERMINATEDBY',';大规模数据的处理,必须要构建分区。此处的需求每天都会进行数据分析(做的是离线分析),采用T+1的模式。--1、创建本地路径,上传源日志文件mkdir-p/export/data/didi--2、通过load命令给表加载数据,并指定分区loaddatalocalinpath'/export/data/didi/order.csv'intotablet_user_orderpartition(dt='2020-04-12’);loaddatalocalinpath'/export/data/didi/cancel_order.csv'intotablet_user_cancel_orderpartition(dt='2020-04-12’);loaddatalocalinpath'/export/data/didi/pay.csv'intotablet_user_pay_orderpartition(dt='2020-04-12’);loaddatalocalinpath'/export/data/didi/evaluate.csv'intotablet_user_evaluatepartition(dt='2020-04-12');2.数据预处理数据已经准备好,需要对ods层中的数据进行预处理。需要在预处理之前考虑以下需求:过滤掉order_time长度小于8的数据,如果小于8,表示这条数据不合法,不应该参加统计。将一些0、1表示的字段,处理为更容易理解的字段。例如:subscribe字段,0表示非预约、1表示预约。需要添加一个额外的字段,用来展示非预约和预约,分析的时候,容易看懂数据。order_time字段为2022-12-11:15,为了将来更方便处理,统一使用类似2022-12-101:15来表示,这样所有的order_time字段长度是一样的。并且将日期获取出来为了方便将来按照年、月、日、小时统计,需要新增这几个字段。要分析一天内不同时段的订单量,需要在预处理过程中将订单对应的时间段提前计算出来。例如:1:00-5:00为凌晨。一天各个时段对应关系在进行预处理之前,先要把预处理之后保存数据的表创建出来。它包含以下字段。创建宽表createtableifnotexistsdw_didi.t_user_order_wide(orderIdstringcomment'订单id',telephonestringcomment'打车用户手机',lngstringcomment'用户发起打车的经度',latstringcomment'用户发起打车的纬度',provincestringcomment'所在省份',citystringcomment'所在城市',es_moneydoublecomment'预估打车费用',genderstringcomment'用户信息-性别',professionstringcomment'用户信息-行业',age_rangestringcomment'年龄段(70后、80后、...)',tipdoublecomment'小费',subscribeintegercomment'是否预约(0-非预约、1-预约)',subscribe_namestringcomment'是否预约名称',sub_timestringcomment'预约时间',is_agentintegercomment'是否代叫(0-本人、1-代叫)',is_agent_namestringcomment'是否代叫名称',agent_telephonestringcomment'预约人手机',order_datestringcomment'预约时间,yyyy-MM-dd',order_yearstringcomment'年',order_monthstringcomment'月',order_daystringcomment'日',order_hourstringcomment'小时',order_time_rangestringcomment'时间段',order_timestringcomment'预约时间')partitionedby(dtstringcomment'时间分区')ROWFORMATDELIMITEDFIELDSTERMINATEDBY',';预处理语句selectorderId,telephone,lng,lat,province,city,es_money,gender,profession,age_range,tip,subscribe,casewhensubscribe=0then'非预约'whensubscribe=1then'预约'endassubscribe_name,sub_time,is_agent,casewhenis_agent=0then'本人'whenis_agent=1then'代叫'endasis_agent_name,agent_telephone,date_format(order_time,'yyyy-MM-dd')asorder_date,year(date_format(order_time,'yyyy-MM-dd'))asorder_year,month(date_format(order_time,'yyyy-MM-dd'))asorder_month,day(date_format(order_time,'yyyy-MM-dd'))asorder_day,hour(date_format(order_time,'yyyy-MM-ddHH:mm'))asorder_hour,casewhenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>1andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=5then'凌晨'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>5andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=8then'早上'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>8andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=11then'上午'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>11andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=13then'中午'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>13andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=17then'下午'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>17andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=19then'晚上'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>19andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=20then'半夜'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>20andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=24then'深夜'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>=0andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=1then'深夜'else'N/A'endasorder_time_range,date_format(order_time,'yyyy-MM-ddHH:mm')asorder_timefromods_didi.t_user_orderwheredt='2022-06-23'andlength(order_time)>8;将数据加载到dw层宽表insertoverwritetabledw_didi.t_user_order_widepartition(dt='2022-06-23')selectorderId,telephone,lng,lat,province,city,es_money,gender,profession,age_range,tip,subscribe,casewhensubscribe=0then'非预约'whensubscribe=1then'预约'endassubscribe_name,sub_time,is_agent,casewhenis_agent=0then'本人'whenis_agent=1then'代叫'endasis_agent_name,agent_telephone,date_format(order_time,'yyyy-MM-dd')asorder_date,year(date_format(order_time,'yyyy-MM-dd'))asorder_year,month(date_format(order_time,'yyyy-MM-dd'))asorder_month,day(date_format(order_time,'yyyy-MM-dd'))asorder_day,hour(date_format(order_time,'yyyy-MM-ddHH:mm'))asorder_hour,casewhenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>1andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=5then'凌晨'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>5andhour(date_format(order_time,'yyyy-MM-ddHH:mm'))<=8then'早上'whenhour(date_format(order_time,'yyyy-MM-ddHH:mm'))>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 踏新途!二年级新篇章暖心课
- 远离危险水域警钟长鸣生命至上小学主题班会课件
- 认识人与自然关系树立环保新观念小学主题班会课件
- 确认2026年客户满意度调研结果的函(3篇)范文
- 网络安全技术顾问系统维护绩效评定表
- 项目管理执行效率提升方案
- 网络程序架构师网络信息技术行业KPI考核表
- 关于2026年服务协议的双方确认函(3篇)
- 2025-2026学年汽车拼装积木教学设计
- 2025-2026学年爬山录像技巧教学设计
- 建设工程消防技术交底
- 2026江苏南通市如皋市卫健、民政和医保系统部分单位招聘事业编制人员167人笔试备考试题及答案详解
- GB/T 47671-2026温室气体产品碳足迹量化方法与要求燃气发电
- 2026年扬州市广陵区社区工作者招聘考试模拟试题及答案详解
- 长输管道工程监理细则+监理规划范本
- 人工智能在战略管理中的应用
- 藏族碉楼营造技艺
- 2026年【安全员C证】考试测试题及答案
- 2026年四川省拟任县处级党政领导职务政治理论水平任职资格考试综合练习题及答案
- 2026年湖南省数字技术应用能力(数字技术综合知识及实践)复习题及答案
- T∕BRACDCHE 005-2026 眼科慢性病基层健康管理指南
评论
0/150
提交评论