結局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
今日はここまで。