这在 0.9.2 中不是问题,但在 0.10 中,当我尝试访问地图中带有美元符号的键时,我会遇到没有定义变量的错误。具体来说:
blah = FOREACH meh GENERATE source, json_post_id#'$id' AS post_id;
returns
Undefined parameter : id
这很好并且有道理,但是当我将其修改为:
blah = FOREACH meh GENERATE source, json_post_id#'\$id' AS post_id;
I get:
Unexpected character '$'
Ideas?
[编辑] 忘记提及:也尝试过使用 2 个反斜杠和 3 个反斜杠。没有骰子。 [/编辑]
-
基于对您的邮件存档发布的回复 http://www.mail-archive.com/user@pig.apache.org/msg06997.html,看起来“当使用 Grunt shell 并将其作为脚本运行时,行为会有所不同”。
输入文件
cheolsoo@localhost:~/workspace/pig-svn $cat 1.txt $id,a
咕噜外壳
The $
没有反斜杠的作品:
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)
Script
The $
使用单个反斜杠可以工作:
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)
-
另外,从分割字符串的猪问题(STRSPLIT) https://stackoverflow.com/questions/5670249/pig-problem-with-split-stringstrsplit,您是否尝试过以下任一操作。
正确转义字符u0024
。使用单引号或双引号测试 single,看看是否有区别。这个答案表明单引号有区别 https://stackoverflow.com/a/7854861/1085891你有,但值得一提。
-
或者,虽然相关,将循环分解为块 https://stackoverflow.com/a/6832401/1085891.
blah = FOREACH meh {
GENERATE source, json_post_id#'$id' AS post_id;
}
看起来你正在连接一个id
。确保您不应该使用CONCAT()
. http://pig.apache.org/docs/r0.10.0/func.html#concat http://pig.apache.org/docs/r0.10.0/func.html#concat
-
根据Class PigStorage文档(Pig 0.10.0 API) http://pig.apache.org/docs/r0.10.0/api/org/apache/pig/builtin/PigStorage.html:
使用字符分隔符将一行输入解析为字段的加载函数。默认分隔符是制表符。您可以将任何字符指定为文字 ("a")、已知的转义字符 ("\t") 或十进制或十六进制值 ("\u001"、"\x0A")。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)