我有一个猪脚本,它发送一个元组,而元组又包含一个元组到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。这是预期还是我做错了什么?
答案 0 :(得分:0)
我发现我们需要使用getPrefixedAliasName
方法来获取内部元组的别名。 AliasableEvalFunc.java文件有一个关于此的示例。