0

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

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

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

谢谢。

4

2 回答 2

0

在我看来,myMethod() 不需要是 UDF。假设这个目录列表不需要在 map reduce 中计算,您可以运行该函数首先获取字符串,然后将其作为传递给 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 可以读取的 glob 格式,或者您有一个不同的 LoadFunc 可以处理您的逗号分隔字符串。

于 2013-04-16T03:32:43.487 回答
0

我遇到了类似的问题,并选择了 Java LoadFunc 实现而不是 pre-processor。使用自定义 LoadFunc 意味着分析师仍然可以使用 stock pig 可执行文件运行脚本,并且不需要其他依赖项。

于 2013-04-16T14:21:03.910 回答