0

我想将一个包元组传递给 UDF。

我有这个数据结构,其所有元素都是arg两个包(x和)的元组( y):

data:{arg: (x: {(a: int,b: int,)},y: {(a: int,b: int)})}

然后,我写了一个UDF:

public class MyUDF extends EvalFunc<String> {

     public String exec(Tuple input) throws IOException {
         if(input == null || input.size() == 0)
             return "empty";
         try{
            DataBag ref_regions = (DataBag)input.get(0);
            return "OK";
         }catch(Exception e){
             System.err.println(e.getMessage());
             return null;
         }
     }
}

我在 PigLatin 脚本中调用它,如下所示:

res = foreach data generate MyUDF(arg); 

不幸的是,我收到了这个错误:

org.apache.pig.data.BinSedesTuple cannot be cast to org.apache.pig.data.DataBag

catch这是由语句打印的。

你能帮我解决这个问题吗?

4

1 回答 1

0

你跑的是什么版本的猪?这是 0.8.1 之前的问题https://issues.apache.org/jira/browse/PIG-1895 BinSedes 通常在从您创建的测试文件中读取时被调用 - 我建议将 Tuple 输入更改为 DataBag 输入在你的 UDF 中。

于 2013-09-21T23:20:12.027 回答