问题 分裂弦猪的猪问题(STRSPLIT)


我有跟随元组H1,想要将它的$ 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 : "\";"

谁知道它有什么问题?谢谢!


8370
2018-04-14 22:03


起源

得到它,但它很棘手:m = FOREACH H1 GENERATE STRSPLIT($ 0,'\\ u003B',50); - ohana
你应该回答你的问题,然后接受它 - The_asMan


答案:


当遇到这个分号时,猪解析例程中存在一个逃避问题。

您可以对分号使用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))

12
2017-10-21 20:22





分号上的STRSPLIT很棘手。我把它放在一个块里面就可以了。

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

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

有趣的是,这是我最初实现我的STRSPLIT()命令的方式。只有在尝试将它拆分为分号后,才会遇到同样的问题。


4
2017-07-26 15:19