Avro 数据格式和命令行
- 支持的原始类型:null,boolean,int,long,float,double,bytes,string
- 支持的复杂类型有:
records
- 必须:"type":"record"
- 必须:"name":"记录名"
- "namespace":"包名"
- "doc":"为schema提供文档"
- "aliases":"json的一个string数组,为这条记录提供别名"
必须:"fields":"json数组,列举所有属性,每个fields都是一个json对象并包含如下属性"
- 必须:"name":"属性名"
- 必须:"type":"属性类型"
- "doc":"属性文档"
- "order":"默认升序"
- "default":"属性默认值"
案例
{ "namespace": "example.avro", "type": "record", "name": "User", "fields": [{"name": "name", "type": "string"},{"name": "favorite_number", "type": ["int", "null"]},{"name": "favorite_color", "type": ["string", "null"]} ] }
enums
- 必须:"type":"enum"
- 必须:"name":"enum名"
- "namespace":"限定和修饰name属性,包名"
- 必须:"symbols":"string数组,列举所有枚举"
- "aliases":"string数组,为enum提供别名"
"doc":"为此schema提供文档"
{"type": "enum","name": "Suit","symbols": ["SPADES","HEARTS","DIAMONDS","CLUBS"] }
arrays
必须:"items":"array中元素的Schema"
{"type": "record","name": "ArrAvro","fields" : [{"name": "arr", "type": ["null",{"type":"array", "items":"string"}]}] } 编译后是: @Deprecated public java.util.List<java.lang.CharSequence> arr;
maps
- 必须:"values":"定义map的值的Schema,Maps的key都是string"
Map定义为
{"type": "record","name": "MapAvro","fields": [{"name": "map","type": ["null",{"type": "map","values": "long"}]}] } 编译后: @Deprecated public java.util.Map<java.lang.CharSequence,java.lang.Long> map
unions
- Unions就像JSON的数组表示:
["string", "null"]
,声明了一个union的Schema,其元素即可以是string,也可以是null。 - Unions不能包含多个相同类型的Schema,除非是命名的record类型、命名的fixed类型和命名的enum类型。比如,如果unions中包含两个array类型,或者包含两个map类型都不允许;但是两个具有不同name的相同类型却可以。由此可见,union是通过Schema的name来区分元素Schema的,因为array和map没有name属性,当然只能存在一个array或者map。(使用name作为解析的原因是这样做会使得读写unions更加高效)。unions不能紧接着包含其他的union。
- 组合类型,表示各种类型的组合,使用数组进行组合。比如[“null”, “string”]表示类型可以为null或者string。
- 组合类型的默认值是看组合类型的第一个元素,因此如果一个组合类型包括null类型,那么null类型一般都会放在第一个位置,这样子的话这个组合类型的默认值就是null。
- 组合类型中不允许同一种类型的元素的个数不会超过1个,除了record,fixed和enum。比如组合类中有2个array类型或者2个map类型,这是不允许的。
- 组合类型不允许嵌套组合类型。
fixed.
- 必须:"name":"名字"
- "namespace":"包名"
- "aliases":"别名"
- 必须:"size":"一个整数,表示每个值的字节数"
- 比如16字节的fixed可以声明为:
{"type": "fixed", "size": 16, "name": "md5"}
avro命令
- 使用avro工具将json文件转换成avro文件:
java -jar avro-tools-1.8.0.jar fromjson --schema-file user.avsc user.json > user.avro
- 可以设置压缩格式:
java -jar avro-tools-1.8.0.jar fromjson --codec snappy --schema-file user.avsc user.json > user2.avro
- 将avro文件反转换成json文件:
java -jar avro-tools-1.8.0.jar tojson user.avro
java -jar avro-tools-1.8.0.jar --pretty tojson user.avro
得到avro文件的meta:
java -jar avro-tools-1.8.0.jar getmeta user.avro
- 输出:
avro.codec null avro.schema {"type":"record","name":"User","namespace":"example.avro","fields":[{"name":"name","type":"string"},{"name":"favorite_number","type":"int"},{"name":"favorite_color","type":"string"}]}
- 得到avro文件的schema:
java -jar avro-tools-1.8.0.jar getschema user.avro
- 将文本文件转换成avro文件:
java -jar avro-tools-1.8.0.jar fromtext user.txt usertxt.avro
Avro 数据格式和命令行相关推荐
- 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出
写在前面 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与可视化)+Perl/Python等(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准. 之前分享过 ...
- caffe 的命令行训练与测试
本文转自: http://blog.csdn.net/yiliang_/article/details/60464968 Train训练(用cmd caffe命令行) (solver.prototxt ...
- sqlmap工具命令行的含义
SQLMAP参数介绍 sqlmap的使用方式:python sqlmap.py [options]: sqlmap中一共有以下十六个选项卡: 帮助选项卡: Target(目标选项卡): Request ...
- Python-csvkit:强大的CSV文件命令行工具
如果你在学Python数据处理,一定对CSV文件不陌生.日常本地数据存储中,除了Excel文件外,大部分数据都是以CSV文件格式保存的. CSV(Comma-Separated Values)是一种文 ...
- 安装rpm包命令_编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出...
不常用R的朋友,可能并不能意识到好的编辑模板带来的长期效率提高和代码重用性,非计算机专业科研人员且需要使用R语言,此文会对您有帮助. 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与 ...
- argparse模块_Argparse:一个具体案例教会你python命令行参数解析
问题描述: 现有一个用于数据格式转换的py脚本(多转一),执行时通过命令行传入一系列的参数控制其具体运行方式,使满足以下要求: 1. 必须传入需要处理的原始数据文件名 2. 可以指定输入文件的格式,若 ...
- curl put方法 测试http_HTTP接口调试利器!4.8万Star的HTTP命令行客户端!
[导语]:Python实现的HTTP请求命令行客户端,我理解为curl的Python版本,但是提供了更友好,更易使用的命令及选项. 简介 HTTPie是使用Python实现的HTTP命令行工具,提供了 ...
- body curl命令测试post_HTTP接口调试利器!4.8万Star的HTTP命令行客户端!
[导语]:Python实现的HTTP请求命令行客户端,我理解为curl的Python版本,但是提供了更友好,更易使用的命令及选项. 简介 HTTPie是使用Python实现的HTTP命令行工具,提供了 ...
- 命令行参数的作用_Rasa 聊天机器人专栏(二):命令行界面
作者 | VK 编辑 | 奇予纪 出品 | 磐创AI团队出品 命令行界面: 备忘单 命令行界面(CLI)为你提供易于记忆的常见任务命令. 命令 作用说明 rasa init 使用示例训练数据,操作和配 ...
最新文章
- ABAP Text edit使用
- 【数据结构总结】第四章:串、数组和广义表(线性结构)
- ant 安装及基础教程 !
- centos7挂载nas存储_Geeki说丨浅谈几种存储添加主机映射方式
- 点对点 客户端-服务器 聊天程序
- 有了容器为什么kubernetes还需要Pod?
- java file rename 失败_java重命名文件造成文件不可读写
- ftp与sftp及sftp和scp的区别
- 通过Etcd+Confd自动管理Haproxy(多站点)
- 算法学习之路|蒜头君的新游戏1
- css中hover的妙用!!
- 协议栈处理中的conntrack HASH查找/Bloom过滤/CACHE查找/大包与小包/分层处理风格
- Qt 本地化(翻译)
- 克服密集恐惧症,目标检测代你实现钢筋精准计数
- python无法定位到table_selenium3 + python - table定位
- Android版本名称
- 三峡学院计算机调剂,2018年重庆三峡学院考研预调剂信息公布
- TC297 Memory Maps 内存映射
- UR机器人使用教程-总结
- Linux转发性能评估与优化之——转发瓶颈分析与解决方案