2011-04-14 20 views
11

i han H1 siguiente tupla, quieren strsplit sus $ 0 en tupla, pero siempre tiene mensaje de error:problema cerdo con una cuerda dividida (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 : "\";" 

alguien sabe lo que está mal con ella? ¡Gracias!

+1

lo tengo, es complicado aunque: m = FOREACH H1 GENERAR STRSPLIT ($ 0, '\\ u003B', 50); – ohana

+4

debe dar una respuesta a su pregunta y luego aceptarla –

Respuesta

4

STRSPLIT en un punto y coma es complicado. Lo tengo que trabajar poniéndolo dentro de un bloque.

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

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

Bastante curioso, así es como originalmente implementé mi comando STRSPLIT(). Solo después de tratar de dividirlo en un punto y coma, me encontré con el mismo problema.

12

Hay un problema de escape en las rutinas de análisis porcino cuando se encuentra con este punto y coma.

Puede usar una secuencia de escape Unicode para un punto y coma: \u003B. Sin embargo, esto también debe ser una barra escapada y poner en una sola cadena entre comillas. Alternativamente, puede volver a escribir el comando en varias líneas, según la respuesta de Neil. En todos los casos, esta debe ser una cadena única entre comillas.

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)) 
Cuestiones relacionadas