2013-01-23 66 views
0

我尝试了所有我能想到的排列方式,但我无法使CONCAT工作。Hadoop猪拉丁语,CONCAT功能失败

当我尝试:

假=负载CONCAT( '富', '酒吧');

我得到以下:

2013年1月17日12:41:44443 [主要] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200:不匹配的输入 'CONCAT' 期待QUOTEDSTRING

我已经尝试过双引号,我不希望这样做,实际上并没有;我试过 将参数传递给脚本并在它们上使用CONCAT,我得到相同的错误。

为了激励这一点,我试图指定一个基本输出目录,它与各种可能的子输出目录连接,这取决于我想要的结果文件的位置。

顺便说一句,我也尝试:

假= LOAD '富' + '酒吧';

也就是说,不使用CONCAT。

我正在使用pig-0.10.1.jar - 我认为这是最新版本。

+0

嗯,错误告诉你什么是错误的。你应该提供一个(单引号字符串)的'LOAD',详见http://pig.apache.org/docs/r0.8.1/piglatin_ref2.html#LOAD) – Seismoid

+0

没错,虽然我正在用STORE这是我真正想要的 - 所以似乎是需要单引号字符串的地方不是也可以使用CONCAT的地方?这是为什么? – Jeff

回答

3

您不能直接在LOAD内拨打CONCAT,但实际上您并不需要。您可以定义要在脚本中使用%declare或通过传递命令行参数/参数文件指定的参数常量。然后你可以使用$x表示法来解析参数,并且级联在shell脚本中是隐含的:

%declare FOO 'foo' 
%declare BAR 'bar' 

fake = load '$FOO$BAR'; 
+0

我会尝试你的建议 - 两个问题:1.我试图从STORE调用CONCAT,因为我暗示。在加载或存储过程中,错误都是说不能调用CONCAT,而是QUOTEDSTRING错误 - CONCAT应该在STORE内工作吗? 2.为什么你不能在LOAD内调用CONCAT? – Jeff

+0

谢谢,就像你说的。不知道我是否错过了Pig Latin的文档中所陈述的内容,或者只是不清楚,但是做一些像'$ FOO $ BAR'这样的东西让我得到了我需要的东西 - 没有使用CONCAT。 – Jeff