python电商项⽬介绍_电商⼤数据项⽬-推荐系统实战(⼀)本项⽬是基于Spark MLLib的⼤数据电商推荐系统项⽬,使⽤了scala语⾔和java语⾔。基于python语⾔的推荐系统项⽬会另外写⼀篇博客。在阅读本博客以前,需要有以下基础:
1.linux的基本命令
2.⾄少有⾼中及以上的数学基础。
3.⾄少有java se基础,会scala语⾔和Java EE更佳(Jave EE⾮必需,但是可以帮助你更快理解项⽬的架构)。
4.有github账户,并且⾄少知道git clone,fork,branch的概念。
5.有⽹络基础,⾄少知道服务器端和客户端的区别。
6.有⼤数据基础,最好会Hadoop,HDFS,MapReduce,Sqoop,HBase,Hive,Spark,Storm。
7.有mysql数据库基础,⾄少会最基本的增删改查。
你要是⼤神,估计看这篇博客也没有任何⽤处,⾄少给点意见和建议呗!
PC配置要求
1.CPU:主流CPU即可
2.内存RAM:⾄少8G,推荐16G及以上,32G不浪费。
3.硬盘:由于VM对I/O流读取速度要求⾼,推荐使⽤256G及以上固态硬盘(SATA3即可.NVME更好),系统盘需要60-100G,其余的专门划⼀个盘⽤于安装虚拟机。或者采⽤傲腾内存+机械硬盘的⽅案。
关于傲腾内存的介绍和装机⽅法
4.GPU显卡;⽆要求。但是如果你想学习深度学习框架的话,可考虑1060 6g甚⾄是2080TI。
5.⽹速:CentOS 8GB多,HDP接近7个G,CDH⼏个包加起来2.5G。⾃⼰算算需要下载多长时间,或者考虑⽤U盘从别⼈那⾥拷贝?
你也可以考虑⽤阿⾥云,腾讯云等云主机。
步骤⼀:
搭建CentOS+HDP的环境,或者CentOS+CDH的环境,这些都是开源的,不⽤担⼼版权问题,企业上
⼀般也是⽤这两种⽅案。
在这⾥我采⽤的是CentOS+HDP的⽅案
⼤数据之搭建HDP环境,以三个节点为例(上——部署主节点以及服务)
⼤数据之搭建HDP环境,以三个节点为例(下——扩展节点,删除节点,以及部署其他服务)
也可以采⽤CentOS+CDH的⽅案
搭建CDH实验环境,以三个节点为例的安装配置
开发⼯具:Eclipse oxygen版本或者IDEA
代码实现部分
1.数据:⽤户查询⽇志来源
搜狗实验室
我选的迷你版
介绍:
搜索引擎查询⽇志库设计为包括约1个⽉(2008年6⽉)Sogou搜索引擎部分⽹页查询需求及⽤户点击情况的⽹页查询⽇志数据集合。为进⾏中⽂搜索引擎⽤户⾏为分析的研究者提供基准研究语料
数据格式为
访问时间\t⽤户ID\t[查询词]\t该URL在返回结果中的排名\t⽤户点击的顺序号\t⽤户点击的URL
python新手代码userid其中,⽤户ID是根据⽤户使⽤浏览器访问搜索引擎时的Cookie信息⾃动赋值,即同⼀次使⽤浏览器输⼊的不同查询对应同⼀个⽤户ID
使⽤Spark进⾏分析和处理
⾸先使⽤Ambari,添加Spark2的服务;由于依赖其他的服务,⽐如Hive等等,需要在启动Ambari Server的时候,指定MySQL的JDBC 驱动。
登录spark-shell,需要⽤下⾯的⽅式:
spark-shell --master yarn-client
ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar
jdbc-driver地址与你安装mysql-connector-java.jar⽬录对应。
(⼆)案例2:⼈⼝分析案例
本案例假设我们需要对某个省的⼈⼝ (1 亿) 性别还有⾝⾼进⾏统计,需要计算出男⼥⼈数,男性中的最⾼和最低⾝⾼,以及⼥性中的最⾼和最低⾝⾼。本案例中⽤到的源⽂件有以下格式, 三列分别是 ID,性别,⾝⾼ (cm)。
使⽤Scala程序⽣成测试数据(⼤概1.3G)
注意:可以将数据量减⼩⼀下,这样处理的时候会短⼀些。⽰例中是1亿条记录,可以改为1万条记录。
并将⽣成的数据放到HDFS上:
hdfs dfs -put sample_ /myproject/data
(三)案例3:电商订单销售数据分析
(四)Spark的累加器和⼴播变量
由于spark是分布式的计算,所以使得每个task间不存在共享的变量,⽽为了实现共享变量spark实现了两种类型 - 累加器与⼴播变量。
1.累加器(accumulator)是Spark中提供的⼀种分布式的变量机制,其原理类似于mapreduce,即分布式的改变,然后聚合这些改变。累加器的⼀个常见⽤途是在调试时对作业执⾏过程中的事件进⾏计数。
⽰例:
val accum = sc.accumulator(10, "My Accumulator")
sc.parallelize(Array(1,2,3,4)).foreach(x => accum+=x)
println(accum.value)
最终结果:20
2.⼴播变量允许程序员将⼀个只读的变量缓存在每台机器上,⽽不⽤在任务之间传递变量。⼴播变量可被⽤于有效地给每个节点⼀个⼤输⼊数据集的副本。Spark还尝试使⽤⾼效地⼴播算法来分发变量,进⽽减少通信的开销。
⽰例:将⽤户信息存⼊⼴播变量。
case class UserInfo(userID:Int,userName:String,userAge:Int)
val broadcastVar = sc.broadcast(UserInfo(100,"Tom",23))
broadcastVar.value
四、各区域热门商品
电商⽹站运营中,需要对每个区域⽤户关⼼的商品进⾏统计分析,⽀持⽤户决策。
⽤途:
分析各区域对产品的不同需求,进⾏差异化研究,例如北京⽤户喜欢⼿机,上海⽤户喜欢汽车。 指导商品折扣,推⼴策略
(⼆)需求分析
(1)如何定义⽤户关⼼的商品?
通过⽤户对商品的点击量来衡量商品热度
复杂模型:通过⽤户点击+购买以及搜藏等综合数据对商品进⾏评价
商品热门程度得分模型 = 点击次数2+购买次数5+搜藏次数*3
其中2,5,3为得分权重
(2)如何获取区域
通过⽤户点击⽇志,订单可以获取地域
① ⽇志数据,来源与⽇志系统,flume ,t+1也可以每30分钟
② 订单来源于数据库,sqoop,t+1也可以每30分钟
数据库⼀定是读写分离
sqoop从读的数据库导数据,所以会造成数据与真实业务库有⼀定的延时
(3)深度思考:如何去除爬⾍⽔军
(三)技术⽅案
数据采集逻辑(ETL)
电商⽇志⼀般存储在⽇志服务器,需要通过Flume拉取到HDFS上
数据的清洗逻辑
使⽤MapReduce进⾏数据清洗
使⽤Spark进⾏清洗
各区域热门商品的分析计算
使⽤Hive进⾏数据的分析和处理
使⽤Spark SQL进⾏数据的分析和处理
思考:能否采⽤MapReduce进⾏数据的分析和处理
(四)实验数据及说明
表Product(产品信息表)
列名 描述 数据类型 空/⾮空 约束条件
product_id 商品号 varchar(18) Not null
product_name 商品名称 varchar(20) Not null
marque 商品型号 varchar(10) Not null
barcode 仓库条码 varchar Not null
price 商品价格 double Not null
brand_id 商品品牌 varchar(8) Not null
market_price 市场价格 double Not null
stock 库存 int Not null
status 状态 int Not null
补充说明 Status:下架-1,上架0,预售(1)
表Area_info(地区信息表)
列名 描述 数据类型 空/⾮空 约束条件
area_id 地区编号 varchar(18) Not null
area_name 地区名称 varchar(20) Not null
补充说明
表order_info(订单信息表)
列名 描述 数据类型 空/⾮空 约束条件
order_id 订单ID varchar(18) Not null
order_date 订单⽇期 varchar(20) Not null
user_id ⽤户ID varchar(20)
product_id 商品ID varchar(20)
补充说明
表user_click_log(⽤户点击信息表)
列名 描述 数据类型 空/⾮空 约束条件
user_id ⽤户ID varchar(18) Not null
user_ip ⽤户IP varchar(20) Not null
url ⽤户点击URL varchar(200)
click_time ⽤户点击时间 varchar(40)
action_type 动作名称 varchar(40)
area_id 地区ID varchar(40)
补充说明 action_type:1收藏,2加⼊购物车,3点击 表area_hot_product(区域热门商品表):最终结果表列名 描述 数据类型 空/⾮空 约束条件
area_id 地区ID varchar(18) Not null
area_name 地区名称 varchar(20) Not null
product_id 商品ID varchar(200)
product_name 商品名称 varchar(40)
pv 访问量 BIGINT
补充说明
(五)技术实现
① 使⽤Flume采集⽤户点击⽇志
通常使⽤shell脚本执⾏⽇志采集
复杂情况,使⽤可视化的ETL⼯具,来进⾏Flume Agent控制
下⾯是配置⽂件,注意HDFS的端⼝号。
② 数据的清洗
需要将⽤户点击⽇志⾥⾯对于商品的点击识别出来
过滤不满⾜6个字段的数据
过滤URL为空的数据,即:过滤出包含http开头的⽇志记录
实现⽅式⼀:使⽤MapReduce程序进⾏数据的清洗
实现⽅式⼆:使⽤Spark程序进⾏数据的清洗
注意:如果不希望在Spark执⾏中,打印过多的⽇志,可以使⽤下⾯的语句:
③ 各区域热门商品热度统计:基于Hive和Spark SQL
⽅式⼀:使⽤Hive进⾏统计
⽅式⼆:使⽤Spark SQL进⾏统计
在Spark SQL中执⾏的SQL:
select a.area_id,a.area_name,p.product_id,product_name,count(c.product_id) from area a,product p,clicklog c where a.area_id=c.area_id and p.product_id=c.product_id group by a.area_id,a.area_name,p.product_id,p.product_name;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论