Как добавить схему ввода для вывода в pig
Я написал один 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 ответ
получил ответ
public Schema outputSchema(Schema input) {
Schema tupleSchema = new Schema(input.getField(0).schema.getField(0).schema.getFields());
Schema.FieldSchema grpName = new Schema.FieldSchema("grpName", DataType.CHARARRAY);
tupleSchema.add(grpName);
Schema.FieldSchema tupleFs = new Schema.FieldSchema("with_grpName", tupleSchema, DataType.TUPLE);
Schema bagSchema =new Schema(tupleFs);
Schema.FieldSchema bagFS =new Schema.FieldSchema("testBag", bagSchema, DataType.BAG);
Schema outputBag=new Schema(bagFS);
return outputBag;
}