如下檔案需要處理,每個檔案大概13g,其中欄位以空格(32)分隔的7個字段;最麻煩的是中間有髒資料:
-rw-r--r-- 1 hadoop ifengdev 1895843464 may 6 14:56feedback201503_201.tar.gz-rw-r--r-- 1 hadoop ifengdev 1896885848 may 6 14:59feedback201503_202.tar.gz
-rw-r--r-- 1 hadoop ifengdev 1891790676 may 6 15:00feedback201503_203.tar.gz
-rw-r--r-- 1 hadoop ifengdev 1894197100 may 6 15:01feedback201503_204.tar.gz
-rw-r--r-- 1 hadoop ifengdev 1894074074 may 6 15:02feedback201503_205.tar.gz
-rw-r--r-- 1 hadoop ifengdev 1829224750 may 6 16:13feedback201504_201.tar.gz
-rw-r--r-- 1 hadoop ifengdev 1831709571 may 6 16:14feedback201504_202.tar.gz
-rw-r--r-- 1 hadoop ifengdev 1824710879 may 6 16:30feedback201504_203.tar.gz
-rw-r--r-- 1 hadoop ifengdev 1827164031 may 6 16:31feedback201504_204.tar.gz
-rw-r--r-- 1 hadoop ifengdev 1827911208 may 6 16:31 feedback201504_205.tar.gz
直接load進hive報錯:
loading data to table default.tmp_20150506
failed with exception wrong file format. please check the file's format.
failed: execution error, return code 1 from org.apache.hadoop.hive.ql.exec.movetask
沒辦法中間格式有問題:
網上說改變儲存格式可以避免報錯:
create table tmp_20150506(dt string,
unknown1 string,
unknown2 string,
reurl string,
uid string,
num1 int,
num2 int)
row format delimited
fields terminated by '32
'lines terminated by '10
'stored as inputformat '
org.apache.hadoop.hive.ql.io.rcfileinputformat
'outputformat '
org.apache.hadoop.hive.ql.io.rcfileoutputformat
'改為:
create table tmp_20150506(
dt string,
unknown1 string,
unknown2 string,
reurl string,
uid string,
num1 int,
num2 int)
row format delimited
fields terminated by '32
'lines terminated by '10
'stored as textfile;
確實不報錯了,根據具體需求也算乙個方法;
最直接的方法:
zcat feedback201503_201.tar.gz|gawk -f ' ' 'nf==7 ' >> feedback20150, "\t", $6, "\t", $7}' >> feedback201503_204.log
功能:替換空格為製表符;並且過濾欄位不滿足要求的髒資料;
接著load進hive即可;
上述方法比較直接,但覺得「體力勞動「過多,可能我比較懶,所以相對喜歡下邊的方法:
基本思路就是把一行作為乙個欄位load進hive,利用hive本身篩選資料:
create table tmp_20150506_raw(allfilds string
)row format delimited
fields terminated by '10
'lines terminated by '10
'stored as textfile;
fields terminated by '10'
lines terminated by '10'都設定成換行符即可,進入hive以後使用hive篩選資料即可。
篩選資料並存入另外一張表中,本例的後續處理過程如下
:
from
(from
(select allfilds from tmp_20150506_raw where size(split(allfilds, ' ')) = 7) a
select split(allfilds, ' ')[0] as dt, split(allfilds, ' ')[1] as unknown1, split(allfilds, ' ')[2] as unknown2, split(allfilds, ' ')[3] as reurl, split(allfilds, ' ')[4] as uid, split(allfilds, ' ')[5] as num1, split(allfilds, ' ')[6] as num2) b
insert overwrite table tmp_20150506 partition(month = '2015-04')
select *
AND一些經驗
目錄 一 參考 1 程式設計師2020工作規範范文 總結 good 適合多看,程式設計師每天 每月做的事情總結了 一 目的 1 在公司來了很久了,有時候一些經驗想把記錄下來,專案 做人 等等 一 專案 1 板卡 pci2012a分為支援和不支援音效卡的 一 做人 1 不要過度依賴別人 1 有問題立馬...
使用資料時的一些經驗
現階段,我在收到資料後,總喜歡將資料拷貝要臨時空間去。然後再對資料進行分析,處理。這樣做在 中間會申請很多的臨時空間,看上去也很亂。例 struct firmware version t int armsize int fpgasize firmware firmware len recvfrom ...
debug的一些經驗
1.儘量減少debug,少用debug,優秀的程式設計師總是花80 的時間來思考如何解決問題,20 的時間來動手完成 而糟糕的程式設計師總是用20 的時間去寫 80 的時間去除錯 動手之前盡量想好如何去做,並且已經為你自己的思路做了充分的實驗。2.盡可能的提高debug的效率,設定合適的斷點,使用快...