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);
}