我有跟随元组H1,我想把它的$ 0 strsplit成元组.但是我总是得到一条错误信息:
DUMP H1:
(item32;item31;,1)
m = FOREACH H1 GENERATE STRSPLIT($0, ";", 50);
Run Code Online (Sandbox Code Playgroud)
错误1000:解析期间出错.第1行第40列的词汇错误.遇到:之后:"\";"
谁知道脚本有什么问题?
spa*_*azm 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))
Run Code Online (Sandbox Code Playgroud)
分号上的 STRSPLIT 很棘手。我通过将其放入一个块中来使其工作。
raw = LOAD 'cname.txt' as (name,cname_string:chararray);
xx = FOREACH raw {
cname_split = STRSPLIT(cname_string,';');
GENERATE cname_split;
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,这就是我最初实现 STRSPLIT() 命令的方式。只有在尝试将其以分号分隔后,我才遇到了同样的问题。