使用AliasableEvalFunc并在Java UDF中读取一包元组

时间:2015-10-22 04:23:35

标签: java apache-pig user-defined-functions udf

我有一个猪脚本,它发送一个元组,而元组又包含一个元组到Java UDF。在UDF中,我使用AliasableEvalFunc通过别名读取元组。我可以通过别名读取包,但不能通过别名读取包中的元组。例如:让我们把猪发送给UDF:

data = load 'input' using PigStorage(',') as (title:chararray,entities:bag{tuple:(entityName:chararray)});
data = foreach data generate udf(title,entities);

包含示例数据的文件如下所示:

ThisIsTitle,{(SampleName)}

这是我的UDF:

class Udf extends AliasableEvalFunc<Tuple> {
    public Tuple exec(Tuple input) {
        String title = getString(input, "title"); //works
        DataBag entities = getBag(input, "entities"); //works
        for (Tuple entity : entities) {
            String name = getString(entity, "entityName"); // this throws an exception
        }
    }
}

基本上发生的事情是,我只能在第一级引用别名。对于嵌套的任何内容,我无法通过别名调用get。这是预期还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

我发现我们需要使用getPrefixedAliasName方法来获取内部元组的别名。 AliasableEvalFunc.java文件有一个关于此的示例。