2011-03-17 27 views
5

我想解析由我們的服務使用Amazon的Elastic Map Reduce通過Pig程序生成的Tab分隔的數據文件。事情進展順利,除了我們所有的數據文件都包含一個標題行來定義每個列的用途。顯然,(串)報頭不能被轉換爲數值數據,所以我得到的警告從豬這樣的:如何從Hadoop的Pig處理的文件中修剪標題行?

2011-03-17 22:49:55,378 [main] WARN org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigHadoopLogger - org.apache.pig.builtin.PigStorage: Unable to interpret value [<snip>] in field being converted to double, caught NumberFormatException <For input string: "headerName"> field discarded 

我已經得到了嘗試,以確保我的負荷語句後過濾器不要以後在任何標題行上操作(通過篩選標題詞),但是我想擺脫警告噪聲以避免掩蓋任何潛在問題(如實際數據字段不能正確轉換)。

這可能嗎?

回答

0

您可以在提交Pig作業(如果可能)之前執行此操作,或者嘗試編寫在滿足特定條件時會發出空值的UDF,以便稍後可以將其過濾掉。

3

另一種選擇,如果你不舒服編寫UDF,可能是這樣的:

的樣本數據:

MyIntVal 
123 
456 

腳本:

A = load 's3://blah/myFile' USING PigStorage() as (myintval: chararray); 

B = filter A by myintval neq 'MyIntVal'; 

C = foreach B generate (int)$0; 

這將過濾標題行出來,然後將剩餘的值轉換爲int。

並不是說這是做到這一點的最佳方式,但它是另一種非常簡單的選擇,只要它適合您的情況。

0

這可能會幫助你得到你的結果: -

input_file = load 'input' using PigStorage(',') as (row1:chararay, row2:chararray); 
ranked = rank input_file; 
/* ranked:{rank_input_file:long, row1:chararay, row2:chararay} */ 
NoHeader = filter ranked by (rank_input_file > 1); 
New_input_file = foreach NoHeader generate row1, row2; 
相關問題