Hive過濾髒資料的一些經驗

2021-09-20 05:37:51 字數 3172 閱讀 9036

如下檔案需要處理,每個檔案大概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的效率,設定合適的斷點,使用快...