当前位置:   article > 正文

用户消费行为分析(MapReduce实现,Hive分析)_通过mapreduce绘制每个会员购买的商品数量的频度分布

通过mapreduce绘制每个会员购买的商品数量的频度分布

目录

一、题目要求

1、数据    

2、数据清洗

3、用户消费趋势分析

二、解题过程

1、MapReduce程序实现数据清洗

mapper处理空值和分隔逗号有三种方法:

2、使用hive解决问题

三、总结


一、题目要求

      数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为数据。

1、数据    

数据共分4个字段,样例如下:

      00001 19970101 1 11.77

      00002 19970112 1 12.00

      00002 19970112 5 77.00

      00003 19970102 2 20.76

      00003 19970330 2 20.76

      00003 19970402 2 19.54

 user_id: 用户ID ,order_dt: 购买日期 ,order_products: 购买产品数 , order_amount: 购买金额

2、数据清洗

       编写MapReduce程序实现数据清洗,将不完 整的数据过滤掉,输出数据以‘,’分割。

3、用户消费趋势分析

         使用hive对清洗后的数据进行分析 通过对用户行为数据进行分析,计算用户消费趋势:

         1.每月各用户的消费次数、购买产品数量、消费总额。

         2.每月的消费总次数、购买产品总数量、消费总额、消费人数。 结合分析结果,给出消费趋势结论。

二、解题过程

1、MapReduce程序实现数据清洗

思路:在mapper中将不完整数据去除,并将数据以逗号分隔,在reducer中去除重复数据。

mapper处理空值和分隔逗号有三种方法:

方法一、

使用for (String m : msgs)是java的一种循环遍历的方法,表示遍历列表msgs里面的每一个对象,而对象的类型是String, 对象名是msgs。如果遍历的对象非空,那么就添加到newmsgs字符串里,并以逗号分隔。

定义新的字符串newmsgs2,并将newmsgs以逗号分隔,赋值给msgs2。令newmsgs2等于msgs的第1列,取第1列数字(0,6),左闭右开,即将日期精确到月。

最后定义字符串newmsgs3, newmsgs3 = msgs2[0]+","+newmsgs2+","+msgs2[2]+","+msgs2[3];即第0,1,2列后加逗号,第三列后不加逗号。

  1. public class ShoppingMapper extends Mapper<LongWritable,Text, Text, NullWritable> {
  2. @Override
  3. protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  4. //得到数据,字符串类型转换成java类型
  5. String data = value.toString();
  6. //用空格分割数据
  7. String[] msgs = data.split(" ");
  8. //定义new
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/781085
推荐阅读
相关标签
  

闽ICP备14008679号