Java Avro使用不存在的架构字段追加通用记录
我有以下模式Java Avro使用不存在的架构字段追加通用记录,java,avro,Java,Avro,我有以下模式 {"namespace": "POS.avro", "type": "record", "name": "POS", "fields": [ {"name": "TransactionID", "type": "int"}, {"name": "Date", "type": "long"}, {"name": "Invoice", "type": "string"}, {"name": "StoreId", "type": "strin
{"namespace": "POS.avro",
"type": "record",
"name": "POS",
"fields": [
{"name": "TransactionID", "type": "int"},
{"name": "Date", "type": "long"},
{"name": "Invoice", "type": "string"},
{"name": "StoreId", "type": "string"},
{"name": "StoreName", "type": "string"},
{"name": "SalesMan", "type": "string"},
]
}
我正在用Java创建通用记录,将其附加到Avro文件中
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);
File avroFile = new File(avroFileName);
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
dataFileWriter.create(schema, avroFile);
// Instantiating the GenericRecord class.
GenericRecord salesRecord = new GenericData.Record(schema);
String key = "Product Name";
Field field = schema.getField(key);
if (field == null) {
salesRecord.put(key, "some value");
}
dataFileWriter.append(salesRecord);
DatumWriter DatumWriter=新的GenericDatumWriter(模式);
文件avroFile=新文件(avroFileName);
DataFileWriter DataFileWriter=新的DataFileWriter(datumWriter);
创建(模式,avroFile);
//实例化GenericRecord类。
GenericRecord salesRecord=新的GenericData.Record(模式);
String key=“产品名称”;
Field=schema.getField(键);
如果(字段==null){
salesRecord.put(key,“some value”);
}
dataFileWriter.append(salesRecord);
我试图用一些值附加不存在的字段,但得到一个AvroRuntimeException
我们可以附加不存在的字段吗?如果是,如何使用Java追加此类字段?如果架构中没有字段,则不能在genericRecord中放入任何键值 这就是put方法的工作原理:
public void put(String key, Object value) {
Field field = this.schema.getField(key);
if(field == null) {
throw new AvroRuntimeException("Not a valid schema field: " + key);
} else {
this.values[field.pos()] = value;
}
}
另外,您确定您的模式有效吗?第{“name”:“saller”,“type”:“string”},