livedoorグルメのデータで機械学習してみる②

結局Hiveを使ってデータのクレンジングをすることに。

まずはテーブルを作ってダウンロードした元データを取り込む。

create table ldgourmet_ratings_org (
    id                  int,
    restaurant_id       int,
    user_id             string,
    total               int,
    food                int,
    service             int,
    atmosphere          int,
    cost_performance    int,
    title               string,
    body                string,
    purpose             string,
    created_on          string
) row format delimited fields terminated by ',';

load data local inpath 'ratings.csv' into table ldgourmet_ratings_org;    

ちゃんと取り込めたかどうかHiveQLで抽出してみる。

select count(distinct restaurant_id), count(distinct user_id), count(*) from ldgourmet_ratings_org;
(省略)
OK
72181   17771   205833
Time taken: 45.217 seconds, Fetched: 1 row(s)

次に、Mahoutに食べさせるデータ形式のテーブルを作成し、そこに抽出。
必要なデータは「ユーザーID,アイテムID,評価」なので、「user_id,restaurant_id,total」とする。
取り込んだデータの1行目がヘッダ行だったので、ついでにそれも除く。

create table ldgourmet_ratings_for_ibr (
    user_id             string,
    restaurant_id       int,
    total               int
) row format delimited fields terminated by ',';

insert overwrite table ldgourmet_ratings_for_ibr
select user_id, restaurant_id, total from ldgourmet_ratings_org
where user_id <> 'user_id';

select * from ldgourmet_ratings_for_ibr limit 10;
OK
ee02f26a        310595  5
fcc21401        10237   1
06412af7        3334    2
06412af7        15163   5
4ceec99d        567     3
4ceec99d        1026    5
4ceec99d        1058    5
4ceec99d        2569    3
4ceec99d        3309    4
4ceec99d        3648    4
Time taken: 0.056 seconds, Fetched: 10 row(s)

できあがったテーブルのデータをファイルとして取得。

$ hadoop fs -ls /user/hive/warehouse/ldgourmet_ratings_for_ibr/
Found 1 items
-rwxr-xr-x   1 take supergroup    3476773 2015-03-04 00:10 /user/hive/warehouse/ldgourmet_ratings_for_ibr/000000_0

$ hadoop fs -get /user/hive/warehouse/ldgourmet_ratings_for_ibr/000000_0 ldgourmet_ratings_for_ibr.csv

今日はここまで。

コメント

コメントする