如何动态计算pig LOAD命令的输入

时间:2013-04-15 23:29:21

标签: apache-pig

有没有办法动态计算猪的LOAD语句的输入值?从概念上讲,我想做这样的事情:

%declare MYINPUT com.foo.myMethod('2013-04-15');
raw = LOAD '$MYINPUT' ...

myMethod()是一个接受日期作为输入的UDF,并以字符串形式返回(逗号分隔的)目录列表。然后将该字符串作为LOAD语句的输入。

感谢。

2 个答案:

答案 0 :(得分:0)

对我来说听起来不像myMethod()需要是UDF。假设这个目录列表不需要在map中计算,你可以运行函数来获取字符串,然后将它作为传递给pig的属性。如果你的驱动程序是在下面提供的java中,请提供示例:

String myInput = myMethod("2013-04-15");
PigServer pig = new PigServer(ExecType.MAPREDUCE);
Map<String,String> myProperties = new HashMap<String,String>();
myProperties.put("myInput",myInput);
pig.registerScript("myScriptLocation.pig");

然后您的脚本将以

开头
raw = LOAD '$myInput' USING...

这假设您的myInput字符串是可以读取的全局格式的PigStorage,或者您有一个不同的LoadFunc可以处理逗号分隔的字符串。

答案 1 :(得分:0)

I had a similar issue and opted for a Java LoadFunc implementation instead of a pre-processor。使用自定义LoadFunc意味着脚本仍然可以由分析师使用stock pig可执行文件运行,并且不需要其他依赖项。