2013-01-11 36 views
4

这在0.9.2中不是问题,但在0.10中,当我尝试访问具有美元符号的地图中的密钥时,我得到了一些我没有定义变量的错误。具体做法是:逃出猪的美元符号?

blah = FOREACH meh GENERATE source, json_post_id#'$id' AS post_id; 

回报

Undefined parameter : id 

这很好和很有道理,但是当我把它修改为:

blah = FOREACH meh GENERATE source, json_post_id#'\$id' AS post_id; 

我得到:

Unexpected character '$' 

想法?

[编辑]忘了提及:已经尝试了2个反斜杠和3个反斜杠。没有骰子。 [/编辑]

+0

我不知道是否可行,但你可以用\\ u0024尝试... – Frederic

+0

已经做了。没有骰子:( – Eli

+0

奇怪的是,在猪中为我工作0.10.0没有逃脱:只是m#'$ id'。你确定问题不是由其他东西引起的? – Frederic

回答

4
  1. Based on a response to your Mail Archive Posting,它看起来像行为将“使用咕噜外壳并运行它作为一个脚本时不同。”

    输入文件

    [email protected]:~/workspace/pig-svn $cat 1.txt $id,a 
    

    咕噜壳

    $没有反斜杠作品:

    grunt> A = LOAD '1.txt' USING PigStorage(',') AS (k:chararray, 
    v:chararray); grunt> B = FOREACH A GENERATE TOMAP(k, v) AS M; grunt> C 
    = FOREACH B GENERATE M#'$id'; grunt> DUMP C; (a) 
    

    脚本

    $用一个反斜杠工作:

    [email protected]:~/workspace/pig-svn $cat test.pig A = LOAD '1.txt' 
    USING PigStorage(',') AS (k:chararray, v:chararray); B = FOREACH A 
    GENERATE TOMAP(k, v) AS M; C = FOREACH B GENERATE M#'\$id'; DUMP C; 
    
    [email protected]:~/workspace/pig-svn $./bin/pig -x local test.pig 
    (a) 
    
  2. 此外,从Pig problem with split string(STRSPLIT),你尝试过以下情况之一。

  3. 它看起来像你的串联id。确保你不会使用CONCAT()http://pig.apache.org/docs/r0.10.0/func.html#concat

  4. According to the Class PigStorage documentation (Pig 0.10.0 API)

    ,它分析一个线路输入的成使用字符的定界符字段的负荷的功能。默认分隔符是一个选项卡。您可以将任何字符指定为文字(“a”),已知转义字符(“\ t”)或十进制或十六进制值(“\ u001”,“\ x0A”)。

+0

上面Cheolsoo的第一个解决方案是100%正确的。奇怪和违反直觉,但正确。 – Eli