目录

开发环境

数据描述

功能需求

数据准备

数据分析

RDD操作

Spark SQL操作

创建Hbase数据表

创建外部表

统计查询


开发环境

Hadoop+Hive+Spark+HBase

启动Hadoop:start-all.sh

启动zookeeper:zkServer.sh start

启动Hive

nohup hiveserver2 1>/dev/null 2>&1 &

beeline -u jdbc:hive2://192.168.152.192:10000

启动Hbase

start-hbase.sh

hbase shell

启动Spark

spark-shell

数据描述

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

功能需求

数据准备

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

创建文件
hdfs dfs -mkdir -p /app/data/exam

上传目录
hdfs dfs -put ./meituan_waimai_meishi.csv /app/data/exam

查看文件行数
hdfs dfs -cat /app/data/exam/meituan_waimai_meishi.csv | wc -l

数据分析

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

RDD操作

    val spark: SparkSession = SparkSession.builder().master("local[*]").appName("exam").getOrCreate()val sc: SparkContext = spark.sparkContextval lines: RDD[String] = sc.textFile("hdfs://192.168.152.192:9000/app/data/exam/meituan_waimai_meishi.csv")val lines1: RDD[Array[String]] = lines.filter(x => x.startsWith("spu_id") == false).map(x => x.split(","))
①统计每个店铺分别有多少商品(SPU)。
lines1.map(x => (x(2), 1)).reduceByKey(_ + _).collect().foreach(println)

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

lines1.map(x => (x(2), Try(x(5).toDouble).toOption.getOrElse(0.0) *Try(x(7).toInt).toOption.getOrElse(0))).reduceByKey(_ + _).collect().foreach(println)

③统计每个店铺销售额最高的前三个商品,输出内容包括店铺名,商品名和销售额,其

中销售额为 0 的商品不进行统计计算,例如:如果某个店铺销售为 0,则不进行统计。
    //方法一lines1.map(x => (x(2), x(4), Try(x(5).toDouble).toOption.getOrElse(0.0) *Try(x(7).toInt).toOption.getOrElse(0))).filter(x => x._3 > 0).groupBy(x => x._1).mapValues(value => value.toList.sortBy(x => -x._3).take(3)) //负号(-)降序.flatMapValues(x => x).collect().foreach(println)//方法二lines1.map(x => (x(2), x(4), Try(x(5).toDouble).toOption.getOrElse(0.0) *Try(x(7).toInt).toOption.getOrElse(0))).filter(x => x._3 > 0).groupBy(x => x._1).flatMap(x => x._2.toList.sortBy(y => 0 - y._3).take(3)).foreach(println)//方法三lines1.map(x => (x(2), x(4), Try(x(5).toDouble).toOption.getOrElse(0.0) *Try(x(7).toInt).toOption.getOrElse(0))).filter(x => x._3 > 0).groupBy(x => x._1).map(x => {var shop_name: String = x._1;var topThree: List[(String, String, Double)] = x._2.toList.sortBy(item => 0 - item._3).take(3);var shopNameAndSumMoney: List[String] = topThree.map(it => it._2 + " " + it._3);(shop_name, shopNameAndSumMoney)}).foreach(println)

Spark SQL操作

    val spark: SparkSession = SparkSession.builder().master("local[*]").appName("exam").getOrCreate()val sc: SparkContext = spark.sparkContextval spuDF: DataFrame = spark.read.format("csv").option("header", true).load("hdfs://192.168.152.192:9000/app/data/exam/meituan_waimai_meishi.csv")spuDF.createOrReplaceTempView("sputb")

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

spark.sql("select * from sputb").show()

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

spark.sql("select shop_name,count(shop_name) as num  from sputb group by shop_name").show()

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

spark.sql("select shop_name, sum(spu_price * month_sales)  as sumMoney  from sputb group by shop_name").show()

创建Hbase数据表

在 HBase 中创建命名空间(namespace)exam,在该命名空间下创建 spu 表,该表下有

1 个列族 result。
create 'exam:spu','result'

创建外部表

请 在 Hive 中 创 建 数 据 库 spu_db

create database spu_db;

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

create external table if not exists  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");

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

create external table if not exists 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");

统计查询

① 统计每个店铺的总销售额 sales, 店铺的商品总点赞数 praise ,并将 shop_id
shop_name 的组合作为 RowKey ,并将结果映射到 HBase
insert into ex_spu_hbase
select concat(tb.shop_id,tb.shop_name) as key, tb.sales,tb.praise from
(select shop_id,shop_name,sum(spu_price*month_sales) as sales, sum(praise_num) as praise
from ex_spu group by shop_id,shop_name) tb;

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

hive > select * from ex_spu_hbase;hbase(main):007:0> scan 'exam:spu'

大数据实战 --- 美团外卖平台数据分析相关推荐

  1. 大数据背景下外卖饮品数据分析系统设计与实现

    摘 要 无论何时何地,信息都很重要.随着万维网的飞速发展,信息以指数的形式出现爆炸式增长.当传统的信息处理延伸到互联网领域时,往往需要下载分布在各个网站本地的信息进行进一步处理.但是,当收集到大量数据 ...

  2. python大数据实战项目_商业数据分析比赛实战,内附项目代码

    如果你对商业数据分析感兴趣.想要积累更多项目经验,那么就来看看下面这项目吧. 数据竞赛平台和鲸社区最近正在举办一场数据分析大赛,不仅带来了22w奖金和30w创业基金支持,更是提供了统一的在线比赛环境, ...

  3. 《OD大数据实战》驴妈妈旅游网大型离线数据电商分析平台

    一.环境搭建 1. <OD大数据实战>Hadoop伪分布式环境搭建 2. <OD大数据实战>Hive环境搭建 3. <OD大数据实战>Sqoop入门实例 4. &l ...

  4. 2018最新vue.js实战项目:美团外卖平台

    vue.js实战项目:美团外卖平台 第1章 课程简介 1-1 课程简介 1-2 课程安排 第2章 Vue.js介绍 2-1 Vuejs介绍-近年来前端开发趋势 2-2 Vuejs介绍-MVVM框架 2 ...

  5. 美团外卖平台vue.js实战项目(完整)

    vue.js实战项目:美团外卖平台 第1章 课程简介 1-1 课程简介 1-2 课程安排 第2章 Vue.js介绍 2-1 Vuejs介绍-近年来前端开发趋势 2-2 Vuejs介绍-MVVM框架 2 ...

  6. 大数据实战-callLog项目(通话记录数据分析)之数据生产

    文章目录 前言 生成基础数据 Maven依赖 姓名-手机号列表 时间维度表 自动随机生成 生成时间戳 生成一定范围内的long数据 代码 调用演示 获得随机的时间戳 代码 调用示例 生成一行记录 打包 ...

  7. 【SDCC 2016·杭州站】9月22日大数据实战专场精彩呈现

    http://geek.csdn.net/news/detail/103266 [SDCC 现场报道]2016年9月22日-23日,由CSDN重磅打造的大数据核心技术与实战峰会.互联网应用架构实战峰会 ...

  8. 《Python Spark 2.0 Hadoop机器学习与大数据实战_林大贵(著)》pdf

    <Python+Spark 2.0+Hadoop机器学习与大数据实战> 五星好评+强烈推荐的一本书,虽然内容可能没有很深入,但作者非常用心的把每一步操作详细的列出来并给出说明,让我们跟着做 ...

  9. 【2017年第4期】流式大数据实时处理技术、平台及应用

    陈纯 浙江大学计算机科学与技术学院,浙江 杭州 310058 摘要:大数据处理系统根据其时效性可分为批式大数据和流式大数据两类.上述两类系统均无法满足"事中"感知查询分析处理模式的 ...

最新文章

  1. 使用rancher对Docker容器服务升级
  2. 图像的灰度化以及二值图函数
  3. 【37.50%】【codeforces 745B】Hongcow Solves A Puzzle
  4. 【ETL】ETL讲解(很详细!!!)
  5. 【OpenCV3】级联分类器训练——traincascade快速使用详解
  6. linux基础——linux进程间通信(IPC)机制总结
  7. html边框有箭头,css简单实现带箭头的边框
  8. 第50课 书香阁的座位数
  9. 网络基础知识(面试基础)
  10. 通达OA任意文件删除/未授权访问+任意文件上传漏洞复现
  11. 读后感系列2:《看见》柴静(一)
  12. PPT插入形状,在里面填写文字,文本框过大
  13. Ruoyi的功能简单介绍
  14. Java基础 快速学习(一)
  15. 堰流实验报告思考题_堰流流量测定
  16. 通过付款码来区分是属于支付宝、微信、还是银行
  17. 《征服老板:零基础做出高逼格PPT》笔记(二)
  18. 联盟链--3Fabric 1.0交易流程
  19. pytest【marker标记】
  20. 机器学习实战-微额借款用户人品预测

热门文章

  1. fastadmin实现弹窗
  2. linux ---硬盘的挂载
  3. 2021-05-03扫雷游戏
  4. idea导入项目全部爆红问题怎么解决
  5. spring mvc常用注解的说明
  6. 弘辽科技:选品大于思路最全选品策略
  7. 别墅装修设计必须注意的误区
  8. mysql 英雄对位胜率
  9. java 同一用户不允许同时登陆
  10. 使用Python爬取上交所问询函并查询相关股票发函日股价