大数据处理使用的那些文件格式(一)

导读:大数据项目中,都采用哪些文件格式来存储处理数据?
 

big-data-file-formats.jpg

 
在Apache Spark中支持很多不同的数据格式,例如最常见的CSV格式以及Web开发中的JSON格式。
 
而用于大数据分析中的常见格式是Apache Parquet和Apache Avro格式。
 
本文中,我们将使用Apache Spark来介绍四种文件格式,分别为CSV,JSON以及Parquet以及Avro格式。
 

CSV格式


 
CSV,逗号分隔符文件,通常用在系统之间拿纯文本方式来交换表格数据。CSV是基于行的文件格式,这意味着文件一行也是表格的一行。通常,CSV包含一个标题行,该标题行包含了数据的列名称,否则CSV文件就被视为半结构化的格式。
 
CSV文件最初并不能显示层次结构或关系型数据。数据的链接通常使用多个CSV文件进行组织。外键存储在一个或多个文件的列中,但是这些文件之间的链接不是由格式本身来表示的。
 
另外,CSV格式尚未完全标准化,因此文件可以使用逗号以外的符号,比如制表符或空格。当CSV文件未经压缩时,或使用BZIP2或LZO格式时,才可以使用拆分。
 
CSV的优点:
 
1)CSV是可读人们阅读的,并且易于编辑
2)CSV提供了一种简单明了的信息模式
3)几乎所有现有的应用程序都可以处理CSV
4)CSV易于实现,易于解析
5)CSV文件紧凑。如果XML,需要为每行中的列中添加开始标签和结束标签。而在CSV中,只需写入行标题即可
 
缺点:
 
1)CSV允许使用平面数据。除了格式外,还需要处理复杂的数据结构。
2)不支持列类型。文本列和数字列之间没有区别。
3)没有表示二进制数据的标准方法。
4)导入CSV时容易出现问题,如NULL和引号之间没有区别
5)特殊字符支持有差异
6)未建立通用标准
 
虽然CSV文件有一定局限性,做CSV格式仍然是数据共享的较佳之选,有众多的应用程序广泛支持,包括消费级以及科学应用产品均支持。
 
大多数的数据批处理以及流式处理工具(如Spark和Hadoop)都支持CSV文件,包括对该文件的序列化和反序列化,并提供了读取时即加入其架构的方法集。
 

JSON格式


 
JSON数据(JavaScript对象表示法),它以键/值对来将数据部分结构化格式表示。
 
JSON格式通常与XML进行比较。它可以按分层格式存储数据,子数据由父数据指示。JSON和XML格式都是自描述的,可由用户读取,JSON文档尺寸通常要小得多。
 
所以,JSON更频繁用于网络通信中,尤其是基于REST的Web服务应用。
 
许多数据传输均使用了JSON格式,大多数Web开发语言都支持JSON格式,或者使用外部库对JSON数据进行序列化和反序列化。
 
有了这种通用化支持,JSON可以显示数据结构,用作热数据的交换和冷数据存储等场景使用。
 
大数据中,批处理和流数据处理工具亦支持JSON序列化和反序列化,JSON中包含的数据最终被性能更加优化的格式(例如Parquet或Avro)替换存储,但JSON提供的原始数据,这对于重新处理数据非常重要。
 
JSON的优点:
 
1)JSON支持分层结构,简化了一个文档中有关数据的存储以及复杂关系的表示
2)大多数开发语言均支持简化的JSON序列化库/反序列化
3)JSON支持对象列表,可避免将列表错误地转换为关系数据模型
4)JSON在NoSQL数据库中,例如MongoDB,Couchbase和Azure Cosmos DB中被广泛使用
5)在当今大多数大数据工具中均内置支持
 

Parquet


 
Parquet在2013年推出,由Cloudera和Twitter公司开发,用来作为基于列的数据存储格式,其对多列数据集进行了大量优化。由于数据是按列存储的,可以进行高度压缩(压缩算法对信息熵较低的数据性能更好),并且支持拆分。Parquet格式的开发者宣称,这种存储格式非常适合大数据的相关存储问题。
 
与CSV和JSON的格式不同,Parquet基于二进制格式,其中包含有关内容的元数据。因此无需二次读取/解析文件内容,Spark依靠元数据就能确定列名称,压缩/编码,确定数据类型,甚至进行一些基本的统计工作。
 
Parquet文件的列元数据存储在文件的尾部,可以进行快速地一次性写入。
 
Parquet针对“ 一次写入多次读取”(WORM)实例进行了大量优化,虽然写起来速度较慢,但是读起来却快得令人难以置信,尤其是仅访问列的一个子集时。对于需要大量数据读取的负载,Parquet是一个很好的选择。
 
因此,若需要对整行数据进行操作时,可以使用CSV或AVRO的文件格式。
 
使用Parquet进行数据存储的优点:
 
1)Parquet是一种柱状形式存储。只有需要的列才会读取,能够有效降低磁盘I/O。这个概念称为Projection Pushdown。
2)数据Schema随数据一起移动,数据是自描述的
 
实际上Parquet是为HDFS文件系统创建的,但数据仍可以存储在其他文件系统中,例如GlusterFs或NFS之上。
Parquet只是一种文件,这意味着可以轻松地使用它们,包括移动,备份和复制。
 
开箱即用的Spark内部支持提供了简单地将文件保存并保存到存储中的功能。当使用snappy这样的压缩格式时,Parquet可以提供高达75%的极高压缩比。
 
如实践所示,与其他文件格式相比,此格式是读取工作流最快的格式。
 
Parquet非常适合数据仓库的解决方案,在这些解决方案中,需要对大量数据上的某些列进行汇总。
 
可以使用Avro API和Avro Schema(可以将所有原始数据存储为Avro格式,然后将处理后的数据存储在Parquet中)来读取和写入Parquet,能够有效降低磁盘I/O成本。
 

编译:王鼎钧


扫一扫,在手机阅读、分享本文

0
分享 2019-11-28

0 个评论

要回复文章请先登录注册