美团外卖平台的部分外卖 SPU数据实操练习

news2024/9/29 11:32:21

一、环境要求

Hadoop + hive + spark + hbase开发环境

开启hadoop:
    start-all.sh

开启zookeeper:
    zkServer.sh start

开启hive:
    nohup hive --service metastore &
    nohup hive --service hiveserver2 &
打开hive界面:
    beeline -u jdbc:hive2://192.168.153.139:10000

开启hbase:
    start-hbase.sh
打开hbase界面:
    hbase shell

二、数据描述

        meituan_waimai_meishi.csv 是美团外卖平台的部分外卖SPU(Standard Product Unit,标准产品单元)数据,包含了外卖平台某地区某一时间的外卖信息。具体字段说明如下:

表1:美团外卖SPU商品数据字典

三、功能要求

1、数据准备

        在HDFS中创建目录/app/data/exam,并将 meituan_waimai_meishi.csv文件传到该目录。并通过HDFS命令查询出文档有多少行数据。

1、hdfs中创建目录/app/data/exam
[root@hadoop02 ~]# hdfs dfs -mkdir -p /app/data/exam

2、上传文件
[root@hadoop02 ~]# hdfs dfs -put /opt/testdata/meituan_waimai_meishi.csv /app/data/exam

3、查询出文档有多少行数据
[root@hadoop02 ~]# hdfs dfs -cat /app/data/exam/meituan_waimai_meishi.csv | wc -l

2、使用Spark加载HDFS文件系统 meituan_waimai_meishi.csv文件。分别使用RDD和SparkSQL完成以下分析(不用考虑数据去重)

        ①统计每个店铺分别有多少商品(SPU)

        ②统计每个店铺的总销售额

        ③统计每个店铺销售额最高的前三个商品。输出内容包括店铺名、商品名和销售额,其中销售额为0 的商品不进行统计计算。例如:如果某个店铺销售为0,则不进行统计。

加载文件:
[root@hadoop02 ~]# spark-shell

RDD:
scala> val fileRDD =sc.textFile("/app/data/exam/meituan_waimai_meishi.csv").filter(x=>x.startsWith("spu_id")==false).map(x=>x.split(",",-1)).filter(x=>x.size==12)

1、统计每个店铺分别有多少商品(SPU)
scala> fileRDD.map(x=>(x(2),1)).reduceByKey(_+_).collect.foreach(println)

2、统计每个店铺的总销售额
scala> fileRDD.map(x=>(x(2),x(5).toDouble*x(7).toInt)).reduceByKey(_+_).collect.foreach(println)

3、统计每个店铺销售额最高的前三个商品
scala>  fileRDD.map(x=>(x(2),x(4),x(5).toDouble*x(7).toInt)).filter(x=>x._3!=0).groupBy(x=>x._1).mapValues(v=>v.toList.sortBy(x=>0-x._3).take(3)).flatMap(x=>x._2).collect.foreach(println)


SparkSQL:
scala> val fileRDD2 = spark.read.format("csv").option("header",true).option("inferSchema",true).load("/app/data/exam/meituan_waimai_meishi.csv")
scala> fileRDD2.createOrReplaceTempView("tbl")


1、统计每个店铺分别有多少商品(SPU)
scala> spark.sql("select shop_name,count(*) from tbl group by shop_name").show

2、统计每个店铺的总销售额
scala> spark.sql("select shop_name,sum(spu_price*month_sales) as money from tbl group by shop_name").show

3、统计每个店铺销售额最高的前三个商品
scala> spark.sql("select shop_name, spu_price*month_sales as sales from (select shop_name,spu_price,month_sales,row_number() over(partition by shop_name order by spu_price*month_sales desc) as rk from tbl where month_sales!=0 )as table where table.rk<=3").show(100)

RDD: 

 SparkSQL:

3、创建HBase数据表

        在hbase中创建命名空间(namespace)exam,在该命名空间下创建spu表,该表下有一个列族result。

进入hbase:
[root@hadoop02 ~]# hbase shell

创建exam下的spu表,spu表有一个列族
hbase(main):007:0> create 'exam:spu','result'

4、在hive中创建数据库spu_db,在该数据库中创建外部表ex_spu指向/app/data/exam下的测试数据;

创建外部表ex_spu_hbase,映射至HBase中的exam:spu表中的result列族

create database spu_db;
use spu_db;
create 'exam:spu','result'

创建hive表
create external table ex_spu(
    spu_id string,
    shop_id string,
    shop_name string,
    category_name string,
    spu_name string,
    spu_price double,
    spu_originprice double,
    month_sales int,
    praise_num int,
    spu_unit string,
    spu_desc string,
    spu_image string
)
row format delimited fields terminated by ","
stored as textfile location "/app/data/exam"
tblproperties ("skip.header.line.count"="1")

创建hbase表
create external table ex_spu_hbase (
    key string,
    sales double,
    praise int
)
stored by "org.apache.hadoop.hive.hbase.HBaseStorageHandler"
with serdeproperties ("hbase.columns.mapping"=":key,result:sales,result:praise")
tblproperties ("hbase.table.name"="exam:spu")

5、统计查询

①统计每个店铺的总销售额sales,店铺的商品总点赞数praise,并将shop_id和shop_name的作何作为RowKey,并将结果映射到HBase。

②完成统计后,分别在hive和HBase中查询结果数据。

第一步:统计数据
select concat(shop_id,shop_name) key,sum(spu_price*month_sales) as sales,sum(praise_num) as praise from ex_spu group by shop_id,shop_name

第二步:映射hbase
insert into ex_spu_hbase
(select concat(shop_id,shop_name) key,sum(spu_price*month_sales) as sales,sum(praise_num) as praise from ex_spu group by shop_id,shop_name );

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu16.04安装NCNN和Opencv

一、安装NCNN 官网&#xff1a;NCNN官方文档 On Debian, Ubuntu or Raspberry Pi OS, you can install all required dependencies using: 首先安装NCNN的依赖项&#xff0c;根据官网安装以下依赖项。 sudo apt install build-essential git cmake libprotobuf-dev protobuf-…

dc-4靶机渗透

1.信息搜集&#xff0c;扫描存活主机&#xff0c;扫描端口&#xff0c;服务,发现开放80&#xff0c;22端口&#xff0c;cms没有看到 nmap 192.168.85.0/24 nmap -p1-66535 192.168.85.175 nmap -sv 192.168.85.1752.访问网站&#xff0c;发现登录框&#xff0c;根据提示&#…

360安全卫士 - 设置技巧 / 关闭广告

360安全卫士 - 设置技巧 / 关闭广告前言同步设置基本设置弹窗设置开机小助手安全防护中心漏洞修复木马查杀功能大全管理360文件夹游戏管家健康助手前言 360安全卫士是一款免费的PC安全软件&#xff0c;拥有垃圾清理、病毒查杀、启动项管理等功能。虽然有一些广告&#xff0c;但…

【Python】python技能树之包含元祖的列表升降序

文章目录前言一、实际操作二、使用步骤总结前言 大家都知道&#xff0c;在Python里面可以使用.sort方法或者sorted函数对各种数据进行排序&#xff0c;例如&#xff1a; 一、实际操作 a [2, 3, 1, 9, 3, 7, 4] a.sort() b [2, 3, 1, 9, 3, 7, 4] c sorted(b, reverseTrue…

Linux中的网络

文章目录一 、查看网络配置1.2 route命令—查看路由条目1.3 1.3hostname命令—查看主机名称1.4netstat命令—查看网络连接情况二 、测试网络连接2.1 ping 命令2.2 traceroute命令—跟踪数据包的路由途径2.3 mtr—动态跟踪网络2.4 nslookup命令—测试域名解析三 、使用网络配置命…

迎难而上,阿里高频考点2023Java岗面试突击手册

上周我接到一位粉丝的私信说目前互联网形势实在对他太不友好&#xff0c;感觉自己每个技术栈都会一点&#xff0c;但不是完全精通。基本二面三面的时候就挂了&#xff0c;已经完全不知道该朝哪个方向努力了&#xff0c;希望可以给他一些建议和方法指导。那么&#xff0c;本次就…

[golang gin框架] 20.Gin 商城项目-商品模块功能

一.商品模块数据表ER图关系分析商品模块数据表相关功能关系见:[golang gin框架] 16.Gin 商城项目-商品模块数据表ER图关系分析二.商品相关界面展示商品列表该商品列表有如下功能1.增加商品按钮:跳转到增加商品页面2.搜索功能:输入商品名称,点击搜索3.修改商品字段(上架,精品,新…

软件测试入门第一步:编写测试报告

什么是测试报告&#xff1f; 1、说明&#xff1a;是指把测试的过程和结果写成文档&#xff0c;对发现的问题和缺陷进行分析&#xff0c;为纠正软件的存在的质量问题提供依据&#xff0c;同时为软件验收和交付打下基础。 ps. 【测试过程和测试结果的分析报告&#xff0c;以及上线…

大爽pygame入门教程 第一节 基础知识 练习提示与答案

作者自我介绍&#xff1a;大爽歌, b站小UP主 &#xff0c;编程1对1辅导老师 1 逐行展示 思路提示 点击触发 之前的多行展示&#xff0c;是通过循环实现的。 这一回要点击触发一行的展示&#xff0c;不能直接使用循环了。 这里我们往更深层次去思考一下&#xff1a; 之前循环…

【CSS】margin 外边距负值使用案例 ( 正常外边距 | 使用外边距负值实现边框重叠 | 重叠边框突出显示 )

文章目录一、正常外边距案例二、使用外边距负值实现边框重叠三、重叠边框突出显示案例1、使用相对定位2、使用 z-index 设置定位盒子层级一、正常外边距案例 margine 正常情况下使用 , 设置 float 浮动 , 使得相邻的盒子模型紧贴在一起 ; 如果设置边框 , 则相邻的边框会重叠在…

A Comprehensive Capability Analysis of GPT-3 and GPT-3.5 Series Models论文学习

一、概述 Motivation&#xff1a;GPT系列的模型&#xff0c;像GPT-3&#xff0c;CodeX&#xff0c;InstructGPT&#xff0c;ChatGPT&#xff0c;尽管很多人关注他们能力的不同&#xff0c;但是很少关注GPT系列模型随着时间变化其能力的变化情况。 Methods&#xff1a; 在9个NL…

【LeetCode】轮转数组

&#x1f47b;内容专栏&#xff1a;《LeetCode刷题专栏》 &#x1f428;本文概括&#xff1a;189.轮转数组 &#x1f43c;本文作者&#xff1a;花 碟 &#x1f438;发布时间&#xff1a;2023.4.12 目录 思想1 暴力求解 代码实现&#xff1a; 思想2 三次倒置 代码实现&#…

Linux使用宝塔面板搭建网站,并内网穿透实现公网访问

文章目录前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4.固定http地址5. 配置二级子域名6.创建一个测试页面前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

Java阶段二Day02

Java阶段二Day02 文章目录Java阶段二Day02SpringMVC的部分主流程HTTP请求Request1&#xff1a;请求行2&#xff1a;消息头3&#xff1a;消息正文HTTP响应Response1&#xff1a;状态行2&#xff1a;响应头3&#xff1a;响应正文通过版本迭代仿写SpringBootV1BirdBootApplication…

云安全—etcd未授权漏洞cert证书遗失

0x00 前言 今儿来看看etcd未授权漏洞以及cert证书遗失问题 0x01 etcd简述 1.etcd是什么 etcd是采用go语言编写的一个分布式的key-value存储。 2.etcd作用 etcd主要用于解决集群管中的OS升级的分布式并发控制以及配置文件的存储与分发等问题。在kubernetes集群中&#xff…

《白帽子讲Web安全》世界观安全

1.Web安全简史1.1中国黑客简史对于现代计算机系统来说&#xff0c;在用户态的最高权限是root&#xff0c;也是黑客们最渴望能够获取的系统最高权限。不想拿到“root”的黑客&#xff0c;不是好黑客。在现实世界中&#xff0c;真正造成破坏的&#xff0c;往往并非那些挖掘并研究…

css右外边距失效问题解释以及解决办法

浏览器默认从左往右渲染元素&#xff0c;在没有超出父容器的宽度的前提下 如果子容器的宽度能够被容纳 设置margin-right是没有用的 解释 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title…

Linux环境搭建SVN服务器并实现公网访问 - cpolar端口映射

文章目录前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6.2 …

C/C++中文参考手册离线最新版

最近又用回C/C刷题&#xff0c;回想上一年还在用Java&#xff0c;C/C才是世界上最好的语言&#xff08;纯属调侃&#xff09;。哼哼&#xff0c;不许反驳。 想分享我正在使用的C/C中文参考手册离线最新版给大家&#xff0c;需要的朋友们可以自行下载&#xff08;free的哦&#…

Pytorch对预训练好的VGG16模型进行微调

目录 1.数据集准备、预训练模型准备 2.对VGG16模型进行微调 3.对数据集进行预处理 4.对模型进行训练并可视化训练过程 5.该测试案例的完整代码 对于一个复杂的卷积神经网络来说&#xff0c;通常网络的层数非常大&#xff0c;网络的深度非常深、网络的参数非常多&#xff0c…