2017-05-10 70 views
0

我有,其結構類似下面文件:豬處理不正確的數據

ID,姓名,地址

1,"Amrit,kumar",India 
2,"Vaibhav,arora",USA 
3,"Deepika,kumar",Germany 

顯然,如果我給pigStorage(「」)這三個字段將被分成4個字節,數據溢出。 替代方案:

  1. 我試着存錢罐罐子,但問題仍然存在,仍然是數據spills.Please找到腳本

    A11 = LOAD 'File.csv.gz' USING org.apache.pig.piggybank.storage.CSVLoader() as (column:type)

  2. 我試着更換fucntiion以及我在下面35K行的變化並不適用於所有的rows.Any流汗走位如何將數據仍然在這種情況下,well.Column值溢出得到轉移到下一個column.Please找到簡稱鏈接下方。

    how can i ignore " (double quotes) while loading file in PIG?

  3. 我試圖CSVEXCEL存儲和CSV裝載機爲好。

請提出我在這裏可以做的事情。我想要在單個列中具有名稱值。

+1

你可以做的是寫一個正則表達式,將取代'所有情況下, '有說'|'除了是之間的那些' 「 」''像1,「 A,b」,C'應該成爲'1 | 「A,b」 | C'那麼你可以使用'PigStorage'加載數據。 – philantrovert

+0

@ philantrovert我不能在這裏改變原始文件。 – codaholic

回答

0

載入到4場,更換報價,第二場後添加一個空格,最後Concat的第二和第三場在一個領域取得的全名/所需column.No外部罐子。

A = LOAD 'File.csv.gz' USING PigStorage(',') AS (f1:int,f2:chararray,f3:chararray,f4:chararray); 
B = FOREACH A GENERATE 
      f1, 
      CONCAT(REPLACE(f2,'\\"',''),' ') as f2, -- replace beginning quote and add space at end 
      REPLACE(f3,'\\"','') as f3,    -- replace ending quote 
      f4; 
C = FOREACH B GENERATE 
      f1 as id, 
      CONCAT(f2,f3) as name, 
      f4 as country; 
DUMP C; 
+0

我們不需要使用替代這裏,因爲存錢罐罐子做工精細,它是消除各地列名稱引號。現在的問題在存儲數據來,因爲我使用** pigStorage(「」)** 。即使我使用CONCAT的數據將有它之間的逗號。什麼是最好的存儲delimitter給這裏或任何其他建議 – codaholic

+0

@codaholic一個工作的解決方案是不夠的?如果你使用concat,爲什麼你會有逗號? pigstorage(',')將以逗號分割這些字段。 –

0

測試了這個腳本與您的數據:

-- load as four fields 
a = LOAD 'data.txt' using PigStorage(','); 

-- removes single quotes from second and third fields 
b = foreach a generate $0 as id, REPLACE($1, '"', '') as firstname, REPLACE($2, '"', '') as lastname, $0 as address; 

-- combines second and third field with a ',' in between 
c = foreach b generate id, CONCAT(firstname, ',', lastname) as name, address; 

現在,測試結果:

test = foreach c generate name; 
dump test; 
(Amrit,kumar) 
(Vaibhav,arora) 
(Deepika,kumar)