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 楼答案
虽然我同意如果使用字段名会影响函数的灵活性,但从技术上讲,可以通过名称访问字段
诀窍是使用
inputSchema
通过getInputSchema()
获得字段索引和名称之间的映射。您还可以重写outputSchema
,并使用inputSchema
参数在那里构建映射。然后你就可以在exec
方法中使用这个映射了