Как генерировать файлы avro без схемы с помощью apache avro?

Я использую Apache avro для сериализации данных. Поскольку данные имеют фиксированную схему, я не хочу, чтобы схема была частью сериализованных данных. В следующем примере схема является частью файла avro " пользователи.Авро".

User user1 = new User();
user1.setName("Alyssa");
user1.setFavoriteNumber(256);
User user2 = new User("Ben", 7, "red");
User user3 = User.newBuilder()
         .setName("Charlie")
         .setFavoriteColor("blue")
         .setFavoriteNumber(null)
         .build();

// Serialize user1 and user2 to disk
File file = new File("users.avro");
DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>(User.class);
DataFileWriter<User> dataFileWriter = new DataFileWriter<User (userDatumWriter);
dataFileWriter.create(user1.getSchema(), new File("users.avro"));
dataFileWriter.append(user1);
dataFileWriter.append(user2);
dataFileWriter.append(user3);
dataFileWriter.close();

может ли кто-нибудь сказать мне, как хранить avro-файлы без встроенной в него схемы?

2 ответов


здесь вы найдете исчерпывающий способ, в котором я объясняю, как достичь сериализации без схемы с помощью Apache Avro. Сопутствующая тестовая кампания показывает некоторые показатели производительности, которые можно ожидать.

на код на GitHub: классы example и test показывают, как использовать средство чтения и записи данных с классом заглушки, созданным самим Avro.


должно быть выполнимо.

учитывая кодировщик, вы можете использовать DatumWriter для записи данных непосредственно в ByteArrayOutputStream (который затем можно записать на java.Ио.Файл).

вот как начать работу в Scala (от Салат-Авро):

val baos = new ByteArrayOutputStream
val encoder = EncoderFactory.get().binaryEncoder(baos, null)
encoder.write(myRecord, encoder)