有没有一种方法可以动态计算pig中load语句的输入值?从概念上讲,我想这样做:
%declare MYINPUT com.foo.myMethod('2013-04-15'); raw = LOAD '$MYINPUT' ...
mymethod()是一个udf,它接受日期作为输入,并以字符串形式返回目录列表(逗号分隔)。然后将该字符串作为load语句的输入。谢谢。
i34xakig1#
我也遇到了类似的问题,选择了javaloadfunc实现,而不是预处理器。使用自定义loadfunc意味着分析师仍然可以使用stock pig可执行文件运行该脚本,并且不需要其他依赖项。
u1ehiz5o2#
我觉得mymethod()不需要是自定义项。假定这个目录列表不需要在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字符串是glob格式的,您可以读取,或者您有一个不同的loadfunc可以处理逗号分隔的字符串。
2条答案
按热度按时间i34xakig1#
我也遇到了类似的问题,选择了javaloadfunc实现,而不是预处理器。使用自定义loadfunc意味着分析师仍然可以使用stock pig可执行文件运行该脚本,并且不需要其他依赖项。
u1ehiz5o2#
我觉得mymethod()不需要是自定义项。假定这个目录列表不需要在map reduce中计算,您可以先运行函数获取字符串,然后将其作为传递给pig的属性。如果您的驱动程序是java的,则提供以下示例:
然后你的剧本会以
这是假设您的myinput字符串是glob格式的,您可以读取,或者您有一个不同的loadfunc可以处理逗号分隔的字符串。