使用 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 中读取一组元组的主要内容,如果未能解决你的问题,请参考以下文章

页码j居中,并在两边添加超长横线

C语言编写一个排序函数(对一维数组排序)并在主函数中调用

C语言在键盘上输入三个学生的信息(包含学号,姓名,三门课的成绩)并在显示器上输

异步调用 WCF 服务并在新任务中等待它

J-unit with java

使用 Servlet 过滤器和 j_security_check 登录时出现无限循环