2011-04-14 59 views
11

我有以下的元組H1,要strsplit其$ 0改成元組,但總是得到錯誤信息:豬問題分割字符串(STRSPLIT)

DUMP H1: 
(item32;item31;,1) 

m = FOREACH H1 GENERATE STRSPLIT($0, ";", 50); 
ERROR 1000: Error during parsing. Lexical error at line 1, column 40. Encountered: <EOF> after : "\";" 

的人都知道這有什麼錯呢?謝謝!

+1

瞭解它,但它很棘手:m = FOREACH H1 GENERATE STRSPLIT($ 0,'\\ u003B',50); – ohana 2011-04-15 05:33:19

+4

你應該爲你的問題提供一個答案,然後接受它 – 2011-04-15 17:52:42

回答

4

STRSPLIT在分號上很棘手。我通過把它放在一個塊裏面來工作。

raw = LOAD 'cname.txt' as (name,cname_string:chararray); 

xx = FOREACH raw { 
    cname_split = STRSPLIT(cname_string,';'); 
    GENERATE cname_split; 
} 

有趣的是,這是我最初實現我的STRSPLIT()命令。只有在試圖讓它在分號上分裂之後,我才遇到同樣的問題。

12

豬分析例程遇到這個分號時有一個轉義問題。

您可以對分號使用unicode轉義序列:\u003B。但是,這也必須斜線轉義並放入單引號字符串中。或者,您可以按照Neil的答案,通過多行重寫命令。在所有情況下,這必須是單引號字符串。

H1 = LOAD 'h1.txt' as (splitme:chararray, name); 

A1 = FOREACH H1 GENERATE STRSPLIT(splitme,'\\u003B'); -- OK 
B1 = FOREACH H1 GENERATE STRSPLIT(splitme,';');  -- ERROR 
C1 = FOREACH H1 GENERATE STRSPLIT(splitme,':');  -- OK 
D1 = FOREACH H1 {          -- OK 
    splitup = STRSPLIT(splitme, ';'); 
    GENERATE splitup; 
} 

A2 = FOREACH H1 GENERATE STRSPLIT(splitme,"\\u003B"); -- ERROR 
B2 = FOREACH H1 GENERATE STRSPLIT(splitme,";");  -- ERROR 
C2 = FOREACH H1 GENERATE STRSPLIT(splitme,":");  -- ERROR 
D2 = FOREACH H1 {          -- ERROR 
    splitup = STRSPLIT(splitme, ";"); 
    GENERATE splitup; 
} 

Dump H1; 
(item32;item31;,1) 

Dump A1; 
((item32,item31)) 

Dump C1; 
((item32;item31;)) 

Dump D1; 
((item32,item31))