【问题标题】:How to generate schema-less avro files using apache avro?如何使用 apache avro 生成无模式 avro 文件?
【发布时间】:2015-03-02 11:17:22
【问题描述】:

我正在使用 Apache avro 进行数据序列化。因为,数据有一个固定的模式,我不希望模式成为序列化数据的一部分。在以下示例中,架构是 avro 文件“users.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 文件?

【问题讨论】:

    标签: java apache avro


    【解决方案1】:

    Here 你会找到一个全面的方法,我在其中解释了如何使用 Apache Avro 实现无模式序列化。 配套测试活动会显示一些您可能期望的性能数据。

    code is on GitHub: 示例和测试类展示了如何将 Data Reader 和 Writer 与 Avro 自身生成的 Stub 类一起使用。

    【讨论】:

    • 使用您在代码中描述的方法是否可以指定编解码器? IE。生成无模式 Avro,例如,deflate 压缩?
    【解决方案2】:

    应该是可行的。

    给定一个编码器,您可以使用 DatumWriter 将数据直接写入 ByteArrayOutputStream(然后您可以将其写入 java.io.File)。

    以下是如何开始使用 Scala(来自 Salat-Avro):

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

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 2014-08-24
      • 2020-02-17
      相关资源
      最近更新 更多