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

最新文章

  1. OC 协议
  2. EventBus3.0源码解析
  3. API测试-Super Test
  4. [20140722] forwarded和forwarding记录
  5. Jquery EasyUI使用总结(一)
  6. SymmetricDS 3.5.0 发布,数据同步和复制
  7. 如何在 OS X Yosemite 中安装 Java
  8. [liu yanling]测试用例的设计方法
  9. nyoj 96 一个水题目
  10. 如何判断Linux是否适合你
  11. 在Ubuntu上安装使用Systemtap
  12. jQuery创建ajax关键词数据搜索
  13. tpcc-mysql安装
  14. 全选与单选chekbox的自定义实现(angular框架)
  15. Android的ViewFlipper-android学习之旅(三十五)
  16. KafkaManager编译安装使用(支持kerberos认证)
  17. zabbix3.0.4 探索主机Discovery自动发现agent主机和zabbix-agent自动注册详细图文教程
  18. 微信小程序,错误{&quot;errMsg&quot;:&quot;request:fail 小程序要求的 TLS 版本必须大于等于 1.2&quot;}
  19. [leetcode]91. Decode Ways解码方法
  20. POJ3714 Raid 分治/K-D Tree

热门文章

  1. Linux inode与文件系统关系
  2. qt 免注册下载
  3. Gitbook
  4. Codeforces 1117G Recursive Queries [线段树]
  5. Flume集群搭建
  6. STM32L476应用开发之三:串行通讯实验
  7. Win#password;;processon #clone;;disassemble;;source find
  8. Winhex数据恢复学习笔记(四)
  9. uva11183 最小树形图模板题
  10. Python字符串编码转换