有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Pig中按名称获取字段?

目前,我有一个简单的pig脚本,可以从hadoop fs上的文件中读取,如下所示:

my_input = load 'input_file' as (A, B, C)

然后我有另一行代码需要处理这些字段,比如将它们转换为大写(如Pig UDF教程)

我会做这样的事

manipulated = FOREACH my_input GENERATE myudf.Upper(A, B, C)

现在在我的Upper.java文件中,我知道我可以得到A,B,C的值(假设它们都是String

    public String exec(Tuple input) throws IOException
    {
        //yada yada yada
        ....
        String A = (String) input.get(0);
        String B = (String) input.get(1);
        String C = (String) input.get(2);
        //yada yada yada
        ....
   }

我是否可以通过字段名获取字段的值?例如,如果我需要得到大约10个字段,除了从0到9执行input.get(i)之外,没有其他方法吗

我是新来的猪,所以我很想知道为什么会这样。有类似tuple.getByFieldName('Field Name')的东西吗


共 (1) 个答案

  1. # 1 楼答案

    虽然我同意如果使用字段名会影响函数的灵活性,但从技术上讲,可以通过名称访问字段

    诀窍是使用inputSchema通过getInputSchema()获得字段索引和名称之间的映射。您还可以重写outputSchema,并使用inputSchema参数在那里构建映射。然后你就可以在exec方法中使用这个映射了