• 支持的原始类型: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 数据格式和命令行相关推荐

  1. 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出

    写在前面 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与可视化)+Perl/Python等(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准. 之前分享过 ...

  2. caffe 的命令行训练与测试

    本文转自: http://blog.csdn.net/yiliang_/article/details/60464968 Train训练(用cmd caffe命令行) (solver.prototxt ...

  3. sqlmap工具命令行的含义

    SQLMAP参数介绍 sqlmap的使用方式:python sqlmap.py [options]: sqlmap中一共有以下十六个选项卡: 帮助选项卡: Target(目标选项卡): Request ...

  4. Python-csvkit:强大的CSV文件命令行工具

    如果你在学Python数据处理,一定对CSV文件不陌生.日常本地数据存储中,除了Excel文件外,大部分数据都是以CSV文件格式保存的. CSV(Comma-Separated Values)是一种文 ...

  5. 安装rpm包命令_编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出...

    不常用R的朋友,可能并不能意识到好的编辑模板带来的长期效率提高和代码重用性,非计算机专业科研人员且需要使用R语言,此文会对您有帮助. 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与 ...

  6. argparse模块_Argparse:一个具体案例教会你python命令行参数解析

    问题描述: 现有一个用于数据格式转换的py脚本(多转一),执行时通过命令行传入一系列的参数控制其具体运行方式,使满足以下要求: 1. 必须传入需要处理的原始数据文件名 2. 可以指定输入文件的格式,若 ...

  7. curl put方法 测试http_HTTP接口调试利器!4.8万Star的HTTP命令行客户端!

    [导语]:Python实现的HTTP请求命令行客户端,我理解为curl的Python版本,但是提供了更友好,更易使用的命令及选项. 简介 HTTPie是使用Python实现的HTTP命令行工具,提供了 ...

  8. body curl命令测试post_HTTP接口调试利器!4.8万Star的HTTP命令行客户端!

    [导语]:Python实现的HTTP请求命令行客户端,我理解为curl的Python版本,但是提供了更友好,更易使用的命令及选项. 简介 HTTPie是使用Python实现的HTTP命令行工具,提供了 ...

  9. 命令行参数的作用_Rasa 聊天机器人专栏(二):命令行界面

    作者 | VK 编辑 | 奇予纪 出品 | 磐创AI团队出品 命令行界面: 备忘单 命令行界面(CLI)为你提供易于记忆的常见任务命令. 命令 作用说明 rasa init 使用示例训练数据,操作和配 ...

最新文章

  1. ABAP Text edit使用
  2. 【数据结构总结】第四章:串、数组和广义表(线性结构)
  3. ant 安装及基础教程 !
  4. centos7挂载nas存储_Geeki说丨浅谈几种存储添加主机映射方式
  5. 点对点 客户端-服务器 聊天程序
  6. 有了容器为什么kubernetes还需要Pod?
  7. java file rename 失败_java重命名文件造成文件不可读写
  8. ftp与sftp及sftp和scp的区别
  9. 通过Etcd+Confd自动管理Haproxy(多站点)
  10. 算法学习之路|蒜头君的新游戏1
  11. css中hover的妙用!!
  12. 协议栈处理中的conntrack HASH查找/Bloom过滤/CACHE查找/大包与小包/分层处理风格
  13. Qt 本地化(翻译)
  14. 克服密集恐惧症,目标检测代你实现钢筋精准计数
  15. python无法定位到table_selenium3 + python - table定位
  16. Android版本名称
  17. 三峡学院计算机调剂,2018年重庆三峡学院考研预调剂信息公布
  18. TC297 Memory Maps 内存映射
  19. UR机器人使用教程-总结
  20. Linux转发性能评估与优化之——转发瓶颈分析与解决方案

热门文章

  1. HTTP CSP详解
  2. Nodejs之旅开始
  3. 7-192 素因子分解 (20 分)
  4. 计算机网络 DNS协议 FTP DHCP
  5. 二叉树先序、中序和后序遍历
  6. java中如何声明班干部,java类成员变量的定义和声明
  7. 华为笔试题--最长公共子串
  8. 使用git push时, 自动忽略__pycache__文件
  9. 学习日报 7-10(验证码)
  10. linux下apache+openssl配置记录