A.avsc:
存入采用的模板
{
"type": "record",
"name": "A",
"fields": [
{"name":"item1","type":"string"},
{"name":"item2","type":"string"}
]
}
存入数据
ByteArrayOutputStream out = new ByteArrayOutputStream();
File template = new File("A.avsc");
Schema schema = new Schema.Parser().parse(template);
GenericRecord a = new GenericData.Record(schema);
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>(a.getSchema());
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);
dataFileWriter.create(a.getSchema(), out);
a.put("item1", "输入内容1");
a.put("item2", "输入内容2");
dataFileWriter.append(a);
dataFileWriter.close();
InputStream inputStream = new ByteArrayInputStream(out.toByteArray());
// 再用inputStream生成data.avro文件
maven compile生成读取使用的实体
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.11.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
</goals>
<configuration>
<sourceDirectory>${project.basedir}/src/main/resources</sourceDirectory>
<outputDirectory>${project.basedir}/src/main/java</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
打包生成
A.java实体
读取:
File dataFile = new File(data.avro);
SpecificDatumReader<Weather> reader = new SpecificDatumReader<>(Aclass);
DataFileReader<Weather> dataFileReader = new DataFileReader<>(dataFile, reader);
while (dataFileReader.hasNext()) {
A a = dataFileReader.next();
// 输出a
}