2013-06-25 24 views
1

我无法从一个foreach中调用宏,例如无法调用一个foreach块

DEFINE valid_attribute(id,attribute) 
    RETURNS result { 
      data  =  LOAD '/user/sathish/sessAttr' AS (id:chararray,browser_version:chararray); 
     filtered_data  = FILTER data BY id == '$id' AND $attribute is NOT null; 
     $result   = foreach filtered_data generate $attribute; 
    }; 

    ip = load '/user/sathish/macros/inputParams' AS (id:chararray,attribute:chararray); 
    op = foreach ip {generate valid_attribute('ip::id','ip:attribute');}; 
    dump op; 

我收到呼叫同一时以下异常中猪宏:

2013-06-25 04:47:42,239 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve valid_attribute using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.] 

回答

4

您不能以这种方式使用宏。一个宏返回一个关系(表),而不是一个单独的值。 GENERATE是为了在你的关系中产生个人价值。您使用宏的方式看起来像是在尝试使用UDF,这就是为什么Pig会在其默认类路径中查找函数的原因,就像它对于任何UDF一样。

+0

感谢您的回复,如果我要写一个UDF,我该如何比较我的输入参数与UDF与我试图加载的整个数据集? – sathishs

+0

我不遵循你的问题,但看着你的脚本,我想你可能正在尝试做类似于'JOIN'的事情?在诉诸UDF之前,看看你是否能在Pig Latin中完成你想要做的事情。 –

+0

ya我们可以在Pig Latin中做同样的事情,这里的属性是一个列名,并且场景是我们必须对多个列执行相同的过程,这会导致编写多个联接语句。因此,试图将代码模块化为可用于n列的函数。 – sathishs

相关问题