CSV, JSON, AVRO,Parquet, and ORC

2021-01-23  本文已影响0人  allenhaozi
big-data-format

CSV

CSV文件(逗号分割不同列的值)常被使用普通文本格式的系统用作交换它们的表格数据。CSV是基于行的文件格式,这意味着文件中的每行数据都对应于表格的一行。总的来说,CSV包含一个头部行,它为数据提供列的名称。不然的话,这些文件会被认为是半结构化。起初,CSV文件不能表示层级或关系型数据。数据之间的关联基本是通过多个CSV文件来实现。一个或多个文件中都会在列中存储外键,但是CSV格式本身并不能表达这些文件之间的关系。而且,CSV格式并没有完全标准化,可以使用除逗号之外的其他分隔符,比如制表符和空格。

优点:

缺点:

JSON

Json数据(JavaScript object notation,即JavaScript对象符号)在一个部分结构化的格式中被表示成一系列键值对。因为可以以层级格式存储数据,所以JSON常被和XML做对比。孩子数据由双亲数据负责呈现。两种格式都是自描述的,并且方便用户阅读理解,但是通常情况下JSON文档会小很多。因此,它们被越来越多的用于网络通讯,特别是伴随着基于REST网络服务的出现。

优点

Parquet

Parquet于2013年面世,由Cloudera和Twitter开发,用来作为列存储的格式,对多列数据集做了优化。由于数据是按列储存,所以它可以被高度压缩(压缩算法在低信息熵的数据中表现更好,而列数据通常正是如此)而且具有良好的可拆分性。该格式的开发者声称这种存储格式是解决大数据问题的理想方案

不像CSV和JSON,Parquet文件是二进制文件,包含描述内容的元数据。所以,不需要读取/解析文件内容,Spark仅仅依赖元数据就可以确定列的名称、压缩/编码信息、数据类型甚至一些基本的统计数据。Parquet文件列的元数据存储在文件的尾部,这样允许快速的、一次性写入。

Parquet针对一次写入,多次读取特性做了优化。它写入慢,但是读取特别快,特别当你只访问全部列的一部分时。有大量读取工作时,Parquet是个好选择。对于需要对整行数据处理的场景,你需要使用类似CSV或者AVRO格式

优点:

Avro

Apache Avro是由Hadoop工作组于2009年发布。它是基于行的格式,并且具备高度的可分拆性。它也被描述为一个类似Java序列化的数据序列化系统。它的schema存储在JSON格式中,但是数据以二进制方式存储,以求文件尺寸最小同时效率最高。通过管理新增字段、缺失字段和被修改的字段,Arvo为schema进化提供了强大的支持。这允许老系统读取新的数据,也允许新系统读取老数据--如果你的数据可能会更改,这会是非常重要的特性。

借助Avro管理schema进化的能力,我们可以在不同时间独立地更新各个组件,并且不兼容的风险很低。这让应用避免使用if-else语句处理不同的schema版本,也让开发者避免查看老代码来理解老的schema。因为所有版本的schema都存储在易于人们阅读理解的JSON头部,所以你很容易理解所拥有的全部字段。

很多不同语言都支持Avro。因为schema存储在JSON中,但是数据存储为二进制,所以Avro在持久化数据存储和数据传输中都是相当紧凑的方案。Avro是写入很多场景的首选方案,因为它可以很容易在尾部添加新行

优点:

ORC

全称是(Optimized Row Columnar), ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache Hive,用于降低Hadoop数据存储空间和加速Hive查询速度。和Parquet类似,它并不是一个单纯的列式存储格式,仍然是首先根据行组分割整个表,在每一个行组内进行按列存储。ORC文件是自描述的,它的元数据使用Protocol Buffers序列化,并且文件中的数据尽可能的压缩以降低存储空间的消耗,目前也被Spark SQL、Presto等查询引擎支持,但是Impala对于ORC目前没有支持,仍然使用Parquet作为主要的列式存储格式。2015年ORC项目被Apache项目基金会提升为Apache顶级项目。

优点:

每种格式的空间占用

space-per-format

每种格式的写入延迟

ingestion-latency

每种格式的随机读取延迟

random-data-lookup

基本统计操作耗时

basic-statistics

每种格式的数据处理耗时

processing-latency

从性能测试中学到得

根据上述测试,类似Apache Parquet这样的列存储在快速数据写入、快速随机数据读取和可扩展性的数据分析上都取得了非常好的适应性。很多情况下,这提供了保持系统简单的额外优势,因为存储数据和其他使用场景(随机访问和分析)只需要一种技术;
不管你做什么--永远不要使用JSON格式。在几乎全部测试中,它都是性能最差。

https://www.jianshu.com/p/80c1cb6ccc74
https://www.jianshu.com/p/2c42a4b7e565

上一篇 下一篇

猜你喜欢

热点阅读