passing包作为udf的输入

t40tm48m  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(532)

我想把一个包的元组递给一个自定义项。
我有一个数据结构,它的所有元素都是元组( arg )两个袋子( x 以及 y ):

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

然后,我写了一个自定义项:

  1. public class MyUDF extends EvalFunc<String> {
  2. public String exec(Tuple input) throws IOException {
  3. if(input == null || input.size() == 0)
  4. return "empty";
  5. try{
  6. DataBag ref_regions = (DataBag)input.get(0);
  7. return "OK";
  8. }catch(Exception e){
  9. System.err.println(e.getMessage());
  10. return null;
  11. }
  12. }
  13. }

我在piglatin脚本中调用它如下:

  1. res = foreach data generate MyUDF(arg);

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

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

它是由 catch 声明。
你能帮我修一下吗?

b5buobof

b5buobof1#

你在跑什么版本的Pig?这是0.8.1之前的问题https://issues.apache.org/jira/browse/pig-1895 binsedes通常在读取您创建的测试文件时被调用——我建议将tuple输入更改为udf中的databag输入。

相关问题