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