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 个反斜杠。没有骰子。[/编辑]

4

1 回答 1

4
  1. 根据对您的 Mail Archive Posting 的回复,看起来行为“在使用 Grunt shell 并将其作为脚本运行时会有所不同”。

    输入文件

    cheolsoo@localhost:~/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)
    

    脚本

    $带有单个反斜杠的工作原理:

    cheolsoo@localhost:~/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;
    
    cheolsoo@localhost:~/workspace/pig-svn $./bin/pig -x local test.pig
    (a)
    
  2. 此外,对于拆分字符串(STRSPLIT)的 Pig 问题,您是否尝试过以下任一方法。

  3. 看起来你正在连接一个id. 确保您不打算使用CONCAT(). http://pig.apache.org/docs/r0.10.0/func.html#concat

  4. 根据Class PigStorage文档(Pig 0.10.0 API)

    使用字符分隔符将输入行解析为字段的加载函数。默认分隔符是制表符。您可以将任何字符指定为文字 ("a")、已知的转义字符 ("\t") 或 dec 或十六进制值 ("\u001"、"\x0A")。

于 2013-01-21T12:14:48.687 回答