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

在JavaUDF中使用AliasableEvalFunc并读取一包元组,java,apache-pig,user-defined-functions,udf,Java,Apache Pig,User Defined Functions,Udf,我有一个pig脚本,它向javaudf发送一个元组,而元组又包含一包元组。在UDF中,我使用AliasableEvalFunc通过别名读取元组。我可以通过别名读取包,但不能通过别名读取包中的元组。例如:假设pig将此发送给UDF: data = load 'input' using PigStorage(',') as (title:chararray,entities:bag{tuple:(entityName:chararray)}); data = foreach data generat

我有一个pig脚本,它向javaudf发送一个元组,而元组又包含一包元组。在UDF中,我使用
AliasableEvalFunc
通过别名读取元组。我可以通过别名读取包,但不能通过别名读取包中的元组。例如:假设pig将此发送给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
        }
    }
}
类Udf扩展了AliasableEvalFunc{
公共元组执行(元组输入){
String title=getString(输入,“title”);//有效
DataBag entities=getBag(输入,“entities”);//有效
for(元组实体:实体){
String name=getString(实体,“entityName”);//这会引发异常
}
}
}

实际上,我只能在第一级引用别名。对于嵌套的任何内容,我都无法调用get by alias。这是预期的还是我做错了什么?

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