2012-01-10 5 views
2

Кажется, что нет никакого способа добавить данные в существующий сериализованный файл Avro. Я бы хотел, чтобы несколько процессов записывались в один файл avro, но каждый раз, когда я его открываю, я начинаю с нуля. Я не хочу читать все данные, а затем снова писать обратно.Можете ли вы добавить данные в существующий файл данных Avro?

Используя код примера ruby, я пробовал «ab» и «ab +» в качестве различных настроек, но без радости.

file = File.open('data.avr', 'wb') 
schema = Avro::Schema.parse(SCHEMA) 
writer = Avro::IO::DatumWriter.new(schema) 
dw = Avro::DataFile::Writer.new(file, writer, schema) 
dw << {"username" => "john", "age" => 25, "verified" => true} 
dw << {"username" => "ryan", "age" => 23, "verified" => false} 
dw.close 

ответ

0

не передавать схему для добавления в файл

2

я выяснить, как это сделать в Java с помощью метода appendTo:

DatumWriter writer = new ReflectDatumWriter(Record.class); 
DataFileWriter file = new DataFileWriter(writer); 
file.setMeta("version", 1); 
file.setMeta("creator", "ThinkBigAnalytics"); 
file.setCodec(CodecFactory.deflateCodec(5)); 
//file.create(schema, new File("/tmp/records")); 
file.appendTo(new File("/tmp/records")); 

Однако, я хотел бы сделать это с Ruby.

Смежные вопросы