如何使用maven进行avro序列化
maven导入avro:
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.7.7</version>
</dependency>
maven导入avro的构建插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.7.7</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
<goal>protocol</goal>
<goal>idl-protocol</goal>
</goals>
<configuration>
<!-- 源目录,用于存放 avro的schema文件及protocol文件 ,如果没加如下配置,那么默认从/src/main/avro下面找avsc文件,生成的java文件放到target/generated-sources/avro下面-->
<sourceDirectory> ${project.basedir}/src/main/avro/</sourceDirectory>
<outputDirectory> ${project.basedir}/src/main/java/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
在${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 class Test_avro { public static void main(String[] args) throws IOException { //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<product> productDatumWriter = new SpecificDatumWriter<product>(product.class); DataFileWriter<product> dataFileWriter = new DataFileWriter<product>(productDatumWriter); dataFileWriter.create(product.getClassSchema() , file); dataFileWriter.append(pro); dataFileWriter.close(); //TODO 反序列 DatumReader<product> productDatumReader = new SpecificDatumReader<product>(product.class); DataFileReader<product> productDataFileReader = new DataFileReader<product>(file , productDatumReader); product pro_reader = null; while (productDataFileReader.hasNext()){ pro_reader = productDataFileReader.next(); System.out.println(pro_reader); } } }

浙公网安备 33010602011771号