java avro串行化反串行化 方法1

avsc文件模板

{"namespace": "com.twq.spark.rdd",
 "type": "record",
 "name": "Dog",
 "fields": [
     {"name": "name", "type": "string"},
     {"name": "favorite_number",  "type": ["int", "null"]},
     {"name": "favorite_color", "type": ["string", "null"]}
 ]
}

1 在命令行使用avro-tools.jar为avsc文件生成java类文件

java -jar avro-tools-1.8.2.jar compile schema dog.avsc java .

2 将上面生成的java类文件放入在项目中

3 项目添加maven依赖

<dependency>
      <groupId>org.apache.avro</groupId>
      <artifactId>avro</artifactId>
      <version>1.8.2</version>
</dependency>

4 串行化 生成avro文件

// 声明并初始化Dog对象
        // 方式一
        Dog user1 = new Dog();
        user1.setName("zhangsan");
        user1.setFavoriteNumber(21);
        user1.setFavoriteColor(null);

        // 方式二 使用构造函数
        // Alternate constructor
        Dog user2 = new Dog("Ben", 7, "red");

        // 方式三,使用Build方式
        // Construct via builder
        Dog user3 = Dog.newBuilder()
                .setName("Charlie")
                .setFavoriteColor("blue")
                .setFavoriteNumber(null)
                .build();

        String path = "C:\\Users\\need\\Desktop\\新建文件夹 (2)\\avro_file\\dog.avro"; // avro文件存放目录
        DatumWriter<Dog> userDatumWriter = new SpecificDatumWriter<Dog>(Dog.class);
        DataFileWriter<Dog> dataFileWriter = new DataFileWriter<Dog>(userDatumWriter);
        dataFileWriter.create(user1.getSchema(), new File(path));
// 把生成的user对象写入到avro文件
        dataFileWriter.append(user1);
        dataFileWriter.append(user2);
        dataFileWriter.append(user3);
        dataFileWriter.close();

5 解析 avro文件

DatumReader<Dog> reader = new SpecificDatumReader<Dog>(Dog.class);
        DataFileReader<Dog> dataFileReader = new DataFileReader<Dog>(
                new File("C:\\Users\\need\\Desktop\\新建文件夹 (2)\\avro_file\\dog.avro"), reader
        );
        Dog user = null;
        while (dataFileReader.hasNext()) {
            user = dataFileReader.next();
            System.out.println(user);
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值