使用 AliasableEvalFunc 并在 Java UDF 中读取一组元组
Posted
技术标签:
【中文标题】使用 AliasableEvalFunc 并在 Java UDF 中读取一组元组【英文标题】:Using AliasableEvalFunc and reading a bag of tuples in Java UDF 【发布时间】:2015-10-22 04:23:34 【问题描述】:我有一个 pig 脚本,它发送一个元组,该元组又包含一袋元组到 Java UDF。在 UDF 中,我使用 AliasableEvalFunc
通过别名读取元组。我可以通过别名读取包,但不能通过别名读取包中的元组。例如:假设猪将其发送到 UDF:
data = load 'input' using PigStorage(',') as (title:chararray,entities:bagtuple:(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】:我发现我们需要使用getPrefixedAliasName
方法来获取内部元组的别名。 AliasableEvalFunc.java 文件有一个关于此的示例。
【讨论】:
以上是关于使用 AliasableEvalFunc 并在 Java UDF 中读取一组元组的主要内容,如果未能解决你的问题,请参考以下文章