【问题标题】:strsplit issue - Pigstrsplit 问题 - 猪
【发布时间】:2011-08-05 22:17:58
【问题描述】:

我有以下元组 H1,我想将其 $0 拆分为元组。但是我总是收到一条错误消息:

DUMP H1:
(item32;item31;,1)

m = FOREACH H1 GENERATE STRSPLIT($0, ";", 50);

ERROR 1000:解析时出错。第 1 行第 40 列的词汇错误。 遇到:后:"\";"

任何人都知道脚本有什么问题吗?

【问题讨论】:

  • 明白了,不过这很棘手:m = FOREACH H1 GENERATE STRSPLIT($0, '\\u003B', 50);
  • 你应该回答你的问题,然后接受它

标签: apache-pig


【解决方案1】:

分号上的STRSPLIT 很棘手。我把它放在一个块里面让它工作。

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

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

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

【讨论】:

    【解决方案2】:

    pig 解析例程遇到这个分号时存在转义问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多