2017-01-16 80 views
0

我試圖產生以下... 輸入 396124436476092416,「想想你活着的生活,但不要覺得這麼難受它傷害生命是一種真正的禮物,但在同樣它是一種詛咒「 Obey_Jony09 396124440112951296,‘00:00 #MAW’,WesleyBitton如何忽略數據字段中的「,」

A = LOAD '/user/root/data/tweets.csv' USING PigStorage(',') as (users:chararray, tweets:chararray); 
B = FILTER A by users == '396124436476092416'; 

輸出截斷 (396124436476092416,」想想你活着的生活,但不覺得那麼辛苦好痛人生真是一份禮物)

輸出除了 (396 124436476092416,「想想你活着的生活,但不要覺得這麼難受它傷害人生真的是一份禮物,但同樣它是一個詛咒」)

我不想讀行作爲行。

回答

1

可以使用CSVLoader加載數據

但是

,如果你不希望這樣做,這裏是Apache的豬本身工作都是圍繞爲:

--load您的數據

A = LOAD 'your/path/users.csv' USING TextLoader() AS (unparsed:chararray); 

--replace你"字符串|以便分離您的tweets

B = FOREACH A GENERATE REPLACE(unparsed, '\\"', '|') AS parsed:chararray; 

--store臨時的解析數據到你的位置

STORE B INTO 'your/path/parsed_users.csv' USING PigStorage('|'); 

--load您解析數據

C = LOAD 'your/path/parsed_users.csv' USING PigStorage('|') AS (users:chararray, tweets:chararray); 

自卸您的數據,怎麼過這仍然會包含一個額外的逗號(, ),但是你可以使用替換函數來替換它。

DUMP C; 
+0

感謝您的想法,改變了 「」 到 「|」 過濾之前的作品。與傳統系統相比,引擎對檢查這些驗證功能的數據沒有額外的價值。 –

0

那是適合在CSV standardization,所以你只需要使用CSVLoader

支持包含逗號和其他 雙引號用反斜槓轉義雙引號的字段。

這是如何使用它:

register file:/home/hadoop/lib/pig/piggybank.jar 
DEFINE CSVLoader org.apache.pig.piggybank.storage.CSVLoader(); 
A = LOAD '/user/root/data/tweets.csv' USING CSVLoader AS (users:chararray, tweets:chararray); 
B = FILTER A by users == '396124436476092416'; 
+0

謝謝,這也適用 –