文章目录

  • 实验数据集下载
    • 下载实验数据集
    • 建立一个用于运行本案例的目录dbtaobao
  • 数据集的预处理
    • 删除文件第一行记录,即字段名称
    • 获取数据集中双11的前100000条数据
    • 导入数据仓库

实验数据集下载

下载实验数据集

  • data_format.zip数据集
  • 用户行为日志user_log.csv,日志中的字段定义如下:
1. user_id | 买家id2. item_id | 商品id3. cat_id | 商品类别id4. merchant_id | 卖家id5. brand_id | 品牌id6. month | 交易时间:月7. day | 交易事件:日8. action | 行为,取值范围{0,1,2,3},0表示点击,1表示加入购物车,2表示购买,3表示关注商品9. age_range | 买家年龄分段:1表示年龄=50,0和NULL则表示未知10. gender | 性别:0表示女性,1表示男性,2和NULL表示未知11. province| 收获地址省份
  • 回头客训练集train.csv和回头客测试集test.csv,训练集和测试集拥有相同的字段,字段定义如下:
user_id | 买家idage_range | 买家年龄分段:1表示年龄=50,0和NULL则表示未知gender | 性别:0表示女性,1表示男性,2和NULL表示未知merchant_id | 商家idlabel | 是否是回头客,0值表示不是回头客,1值表示回头客,-1值表示该用户已经超出我们所需要考虑的预测范围。NULL值只存在测试集,在测试集中表示需要预测的值。

建立一个用于运行本案例的目录dbtaobao

  • 把data_format.zip进行解压缩,我们需要首先建立一个用于运行本案例的目录dbtaobao
cd /usr/locallssudo mkdir dbtaobao# 这里会提示你输入当前用户(本教程是hadoop用户名)的密码# 下面给hadoop用户赋予针对dbtaobao目录的各种操作权限sudo chmod -R 777 ./dbtaobaocd dbtaobao# 下面创建一个dataset目录,用于保存数据集mkdir dataset# 下面就可以解压缩data_format.zip文件cd ~/下载lsunzip data_format.zip -d /usr/local/dbtaobao/datasetcd /usr/local/dbtaobao/datasetls

  • 取出user_log.csv前面5条记录看一下
head -5 user_log.csv

数据集的预处理

删除文件第一行记录,即字段名称

cd /usr/local/dbtaobao/dataset# 下面删除user_log.csv中的第1行sed -i '1d' user_log.csv # 1d表示删除第1行,同理,3d表示删除第3行,nd表示删除第n行# 下面再用head命令去查看文件的前5行记录,就看不到字段名称这一行了head -5 user_log.csv

获取数据集中双11的前100000条数据

  • 由于数据集中交易数据太大,这里只截取数据集中在双11的前10000条交易数据作为小数据集small_user_log.csv
  • 建立一个脚本文件完成上面截取任务,请把这个脚本文件放在dataset目录下和数据集user_log.csv:
cd /usr/local/dbtaobao/datasetvim predeal.sh
  • 使用vim编辑器新建了一个predeal.sh脚本文件,请在这个脚本文件中加入下面代码:
#!/bin/bash#下面设置输入文件,把用户执行predeal.sh命令时提供的第一个参数作为输入文件名称infile=$1#下面设置输出文件,把用户执行predeal.sh命令时提供的第二个参数作为输出文件名称outfile=$2#注意!!最后的$infile > $outfile必须跟在}’这两个字符的后面awk -F "," 'BEGIN{      id=0;    }    {        if($6==11 && $7==11){            id=id+1;            print $1","$2","$3","$4","$5","$6","$7","$8","$9","$10","$11            if(id==10000){                exit            }        }    }' $infile > $outfile
  • 执行predeal.sh脚本文件,截取数据集中在双11的前10000条交易数据作为小数据集small_user_log.csv,命令如下:
chmod +x ./predeal.sh./predeal.sh ./user_log.csv ./small_user_log.csv

导入数据仓库

  • 启动HDFS

  • 把user_log.csv上传到HDFS中

# 在HDFS的根目录下面创建一个新的目录dbtaobao,并在这个目录下创建一个子目录dataset,如下cd /usr/local/hadoop./bin/hdfs dfs -mkdir -p /dbtaobao/dataset/user_log# 把Linux本地文件系统中的small_user_log.csv上传到分布式文件系统HDFS的“/dbtaobao/dataset”目录下,命令如下:cd /usr/local/hadoop./bin/hdfs dfs -put /usr/local/dbtaobao/dataset/small_user_log.csv /dbtaobao/dataset/user_log# 下面可以查看一下HDFS中的small_user_log.csv的前10条记录,命令如下:cd /usr/local/hadoop./bin/hdfs dfs -cat /dbtaobao/dataset/user_log/small_user_log.csv | head -10

  • 在Hive上创建数据库
# 请在Linux系统中,再新建一个终端(可以在刚才已经建好的终端界面的左上角,点击“终端”菜单,在弹出的子菜单中选择“新建终端”)# 因为需要借助于MySQL保存Hive的元数据,所以,请首先启动MySQL数据库service mysql start  #可以在Linux的任何目录下执行该命令# 在这个新的终端中执行下面命令进入Hive:cd /usr/local/hive./bin/hive   # 启动Hive# 在Hive中创建一个数据库dbtaobaohive>  create database dbtaobao;hive>  use dbtaobao;

  • 创建外部表
# 关于数据仓库Hive的内部表和外部表的区别# 这里分别在数据库dbtaobao中创建一个外部表user_log,它包含字段:# (user_id,item_id,cat_id,merchant_id,brand_id,month,day,action,age_range,gender,province)# 在hive命令提示符下输入如下命令:hive>  CREATE EXTERNAL TABLE dbtaobao.user_log(user_id INT,item_id INT,cat_id INT,merchant_id INT,brand_id INT,month STRING,day STRING,action INT,age_range INT,gender INT,province STRING) COMMENT 'Welcome to xmu dblab,Now create dbtaobao.user_log!' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/dbtaobao/dataset/user_log';
  • 查询数据
# HDFS中的“/dbtaobao/dataset/user_log”目录下的small_user_log.csv数据加载到了数据仓库Hive中hive>  select * from user_log limit 10;