淘寶雙11大數據分析(數據準備篇)

前言

閱讀前,請先查看前篇:淘寶雙11大數據分析(環境篇)

數據下載地址:百度雲下載

另:爲求方便行事,我這裏的用戶全是 root 用戶(雖然超級不建議這麼玩)

數據內容分析

本案例採用的數據集壓縮包爲data_format.zip。

該數據集壓縮包是淘寶2015年雙11前6個月(包含雙11)的交易數據(交易數據有偏移,但是不影響實驗的結果),裏面包含3個文件,分別是用戶行爲日誌文件user_log.csv 、回頭客訓練集train.csv 、回頭客測試集test.csv.

user_log.csv文件內容含義

字段 含義
user_id 買家 id
item_id 商品 id
cat_id 商品類別 id
merchant_id 賣家 id
brand_id 品牌 id
month 交易時間:月
day 交易時間:日
action 行爲:取值爲{0,1,2,3}。 其中0表示點擊,1表示加入購物車,2表示購買,3表示關注商品
age_range 賣家年齡分段:1表示年齡小於18,2表示年齡是[18,24],3表示[25,29],4表示[30,34],5表示[35,39],6表示年齡在[40,49],7和8表示年齡>=50,0和 NULL 則表示未知
gender 性別:0表示女性,1表示男性,2和 NULL 表示未知
province 收貨地址:省份

train.csvtest.csv 文件內容含義

這倆文件字段擁有相同的定義:

字段 含義
user_id 買家 id
age_range 買家年齡分段:1表示年齡小於18,2表示年齡在[18,24],3表示年齡在[25,29],4表示年齡在[30,34],5表示年齡在[35,39],6表示年齡在[40,49],7和8表示年齡>=50,0和NULL則表示未知
gender 性別:0表示女性,1表示男性,2和NULL表示未知
merchant_id 商家 id
label 是否是回頭客,0值表示不是回頭客,1值表示回頭客,-1值表示該用戶已經超出我們所需要考慮的預測範圍。NULL值只存在測試集,在測試集中表示需要預測的值。

數據上傳到Linux系統並解壓

/usr 下新建一個目錄taobao_data

[root@centos2020 spark-2.4.4-bin-hadoop2.7]# cd /usr/
[root@centos2020 usr]# mkdir taobao_data

使用 xftp上傳壓縮包到 taobao_data目錄中:

[root@centos2020 taobao_data]# ls
data_format.zip

先在taobao_data創建一個 dataset 目錄:

[root@centos2020 taobao_data]# ls
data_format.zip  dataset

開始解壓:

[root@centos2020 taobao_data]# unzip data_format.zip -d dataset
Archive:  data_format.zip
  inflating: dataset/test.csv        
  inflating: dataset/train.csv       
  inflating: dataset/user_log.csv

查看解壓後的文件信息:

[root@centos2020 dataset]# ll
total 2790636
-rw-rw-r--. 1 root root  129452503 Mar  2  2017 test.csv
-rw-rw-r--. 1 root root  129759806 Mar  2  2017 train.csv
-rw-rw-r--. 1 root root 2598392805 Feb 23  2017 user_log.csv

查看文件的內容:

# 查看 user_log.csv 文件的前 5 條數據
[root@centos2020 dataset]# head -5 user_log.csv 
user_id,item_id,cat_id,merchant_id,brand_id,month,day,action,age_range,gender,province
328862,323294,833,2882,2661,08,29,0,0,1,內蒙古
328862,844400,1271,2882,2661,08,29,0,1,1,山西
328862,575153,1271,2882,2661,08,29,0,2,1,山西
328862,996875,1271,2882,2661,08,29,0,1,1,內蒙古

數據集的預處理

首先,在查看了前5條數據之後,發現,第一行是字段信息。

因此需要在處理數據之前,先把第一行的字段刪除掉。

[root@centos2020 dataset]# sed -i '1d' user_log.csv

命令解釋:

‘1d’ 表示刪除第一行(如果是 '2d’ 就是刪除第二行,依次類推)

查看刪除後的結果(發現已經沒有字段信息了):

[root@centos2020 dataset]# head -5 user_log.csv 
328862,323294,833,2882,2661,08,29,0,0,1,內蒙古
328862,844400,1271,2882,2661,08,29,0,1,1,山西
328862,575153,1271,2882,2661,08,29,0,2,1,山西
328862,996875,1271,2882,2661,08,29,0,1,1,內蒙古
328862,1086186,1271,1253,1049,08,29,0,0,2,浙江

文件信息截取

截取的原因:因爲數據量過大,我本機硬件的限制(怪我咯),因此需要將原數據進行截取。

原數據有100000條,現在需要截取 10000條數據。

因爲可能會多次進行信息截取,因此寫一個腳本predeal.sh

[root@centos2020 taobao_data]# 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

授權執行:

[root@centos2020 taobao_data]# chmod +x predeal.sh 
[root@centos2020 taobao_data]# ll
total 598264
-rw-r--r--. 1 root root 612614352 Feb 25 22:03 data_format.zip
drwxr-xr-x. 2 root root        59 Feb 25 22:19 dataset
-rwxr-xr-x. 1 root root       602 Feb 25 23:00 predeal.sh
[root@centos2020 taobao_data]# ./predeal.sh ./dataset/user_log.csv ./dataset/small_user_log.csv

# 確認是否截取數據成功
[root@centos2020 taobao_data]# cd dataset/
[root@centos2020 dataset]# head -5 small_user_log.csv 
328862,406349,1280,2700,5476,11,11,0,0,1,四川
328862,406349,1280,2700,5476,11,11,0,7,1,重慶市
328862,807126,1181,1963,6109,11,11,0,1,0,上海市
328862,406349,1280,2700,5476,11,11,2,6,0,臺灣
328862,406349,1280,2700,5476,11,11,0,6,2,甘肅

導入數據到Hive中

small_user_log.csv 文件中的數據導入到 Hive 數據倉庫中。

這個過程分成2步:

  1. 把目標文件上傳到 HDFS 中。
  2. 在 Hive 中建立 2 個外部表以完成數據的導入。

確認 Hadoop 服務已啓動

[root@centos2020 dataset]# jps
11408 Master
12321 Jps
7876 NameNode
8183 ResourceManager
7930 DataNode
8477 NodeManager
11550 Worker

看到 NameNode,NodeManager,DataNode 等服務已經啓動。

上傳數據文件

首先在 HDFS 上創建目錄 /taobao_data/dataset/user_log

在 Hadoop 安裝目錄下使用以下命令:

[root@centos2020 hadoop-2.7.7]# ./bin/hdfs dfs -mkdir -p /taobao_data/dataset/user_log

接着使用命令上傳文件到 HDFS:將Linux中的small_user_log.csv 文件上傳到HDFS 文件目錄/taobao_data/dataset/user_log 中。

[root@centos2020 hadoop-2.7.7]# ./bin/hdfs dfs -put /usr/taobao_data/dataset/small_user_log.csv /taobao_data/dataset/user_log

確認上傳成功:

可以選擇使用命令或使用圖形化界面。

使用命令查看 HDFS 上的 small_user_log.csv 文件的前10行記錄:

[root@centos2020 hadoop-2.7.7]# ./bin/hdfs dfs -cat /taobao_data/dataset/user_log/small_user_log.csv | head -10
328862,406349,1280,2700,5476,11,11,0,0,1,四川
328862,406349,1280,2700,5476,11,11,0,7,1,重慶市
328862,807126,1181,1963,6109,11,11,0,1,0,上海市
328862,406349,1280,2700,5476,11,11,2,6,0,臺灣
328862,406349,1280,2700,5476,11,11,0,6,2,甘肅
328862,406349,1280,2700,5476,11,11,0,4,1,甘肅
328862,406349,1280,2700,5476,11,11,0,5,0,浙江
328862,406349,1280,2700,5476,11,11,0,3,2,澳門
328862,406349,1280,2700,5476,11,11,0,7,1,臺灣
234512,399860,962,305,6300,11,11,0,4,1,安徽
cat: Unable to write to output stream.

使用圖形化界面:訪問 50070 端口。
在這裏插入圖片描述

在 Hive 上創建數據表

首先啓動 mysql 數據庫,因爲 Hive 的元數據配置到了 mysql 上。

然後得確認 Hadoop 服務已經啓動(使用 jps 命令查看服務即可)。

[root@centos2020 hadoop-2.7.7]# service mysql start
Redirecting to /bin/systemctl start mysql.service

啓動 Hive :

[root@centos2020 apache-hive-2.3.6-bin]# ./bin/hive

在 Hive 中創建數據庫 dbtaobao

hive> create database dbtaobao;
OK
Time taken: 13.067 seconds
hive> use dbtaobao;
OK
Time taken: 0.051 seconds

dbtaobao 中創建一個外部表 user_log

該表字段包含:user_id,item_id,cat_id,merchant_id,brand_id,month,day,action,age_range,gender,province

建表語句是:

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 'this is action what create dbtaobao.user_log' row format delimited fields terminated by ',' stored as textfile location '/taobao_data/dataset/user_log';

建表之後,查看錶中的前10條內容:

hive> select * from user_log limit 10;
OK
328862	406349	1280	2700	5476	11	11	0	0	1	四川
328862	406349	1280	2700	5476	11	11	0	7	1	重慶市
328862	807126	1181	1963	6109	11	11	0	1	0	上海市
328862	406349	1280	2700	5476	11	11	2	6	0	臺灣
328862	406349	1280	2700	5476	11	11	0	6	2	甘肅
328862	406349	1280	2700	5476	11	11	0	4	1	甘肅
328862	406349	1280	2700	5476	11	11	0	5	0	浙江
328862	406349	1280	2700	5476	11	11	0	3	2	澳門
328862	406349	1280	2700	5476	11	11	0	7	1	臺灣
234512	399860	962	305	6300	11	11	0	4	1	安徽
Time taken: 3.761 seconds, Fetched: 10 row(s)

如此,數據就準備好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章