我已经编写了一个udf,其中我的输入模式是一个元组包,现在在我的udf中,我处理每个元组,为每个元组添加额外的字段,并将其提供给输出包。这很好,现在在我的下一步中,我尝试创建我的输出包的输出模式,我只想在我的包的输入元组中附加一个字段。我该怎么做?
这是我的输入包模式。
xx: {(uniqueRS::PreprocUDF::id: long,uniqueRS::PreprocUDF::dominion: chararray,uniqueRS::PreprocUDF::affectedItemGRN: chararray,uniqueDomAndUser: {(PreprocUDF::dominion: chararray)},uniqueRS::PreprocUDF::count: long)}
现在我需要这样
outputBag: {(uniqueRS::PreprocUDF::id: long,uniqueRS::PreprocUDF::dominion: chararray,uniqueRS::PreprocUDF::affectedItemGRN: chararray,uniqueDomAndUser: {(PreprocUDF::dominion: chararray)},uniqueRS::PreprocUDF::count: long,grpName:chararray)}
我试着把它作为我的输出模式,但没用,
public Schema outputSchema(Schema input) {
Schema.FieldSchema grpName = new Schema.FieldSchema("grpName", DataType.CHARARRAY);
input.add(grpName);
retrun input;
}
我也试过使用'mergeprefixschema(),但仍然不走运,请帮帮我。
也尝试过这种方式
public Schema outputSchema(Schema input) {
Schema.FieldSchema inputTupleFS = input.getField(0);
Schema.FieldSchema grpName = new Schema.FieldSchema("grpName", DataType.CHARARRAY);
ArrayList<Schema.FieldSchema> tupleList=new ArrayList();
tupleList.add(inputTupleFS);
tupleList.add(grpName);
Schema bagSchema =new Schema(tupleList);
Schema.FieldSchema bagFS =new Schema.FieldSchema("testBag", bagSchema, DataType.BAG);
Schema outputBag=new Schema(bagFS);
}
谢谢。
1条答案
按热度按时间g52tjvyc1#
感谢[http://mail-archives.apache.org/mod_mbox/pig-user/201208.mbox/%3c79a5bc65bfc37343844d4bb8a05dd3ee0183a649ba@opera-ex5.ny.os.local%3e][1]
找到答案了吗