maven导入avro:
org.apache.avro
avro
1.7.7
maven导入avro的构建插件:
org.apache.avro
avro-maven-plugin
1.7.7
generate-sources
schema
protocol
idl-protocol
${project.basedir}/src/main/avro/
${project.basedir}/src/main/java/
org.apache.maven.plugins
maven-compiler-plugin
1.7
1.7
在${project.basedir}/src/main/avro/ 下导入json文件,就是所谓的数据schema
{"namespace":"user_machine_learning","type":"record","name":"product","fields":[
{"name":"product_id","type":"string","default":"null"},
{"name":"company_name","type":"string","default":"null"},
{"name":"product_info","type":"string","default":"null"},
{"name":"direction","type":"string","default":"null"}
]
}
maven和schema构建好之后需要进行install,然后就会在 ${project.basedir}/src/main/avro/ 目录下产生构建好的序列化代码,这个代码只需要使用java进行调用即可
使用java进行序列化和反序列化的操作:
public classTest_avro {public static void main(String[] args) throwsIOException {//TODO 序列化操作
product pro =product.newBuilder().build();
pro.setProductId("1");
pro.setCompanyName("这是一个测试");
pro.setProductInfo("测试的详细说明");
pro.setDirection("1");//将生成的数据保存到本地文件中
File file = new File("/Users/niutao/Desktop/avro_test/user.avro");
DatumWriter productDatumWriter = new SpecificDatumWriter(product.class);
DataFileWriter dataFileWriter = new DataFileWriter(productDatumWriter);
dataFileWriter.create(product.getClassSchema() , file);
dataFileWriter.append(pro);
dataFileWriter.close();//TODO 反序列
DatumReader productDatumReader = new SpecificDatumReader(product.class);
DataFileReader productDataFileReader = new DataFileReader(file , productDatumReader);
product pro_reader= null;while(productDataFileReader.hasNext()){
pro_reader=productDataFileReader.next();
System.out.println(pro_reader);
}
}
}