我可以读到一些文章,其中我可以读到csv对于大型数据集来说速度较慢且不好。但我不能理解它是什么与avro/parquet内部,这使得它更快的更大的数据集比csv。
8xiog9wr1#
首选数据格式的顺序(在Hadoop上下文中)通常是ORC、Parquet、Avro、SequenceFile,然后是PlainText。反对CSV的主要原因是它只是一个字符串,这意味着通过根据文件编码(例如UTF8)存储所有字符,数据集会更大;不存在与数据相关联的类型信息或模式,并且在反序列化时将始终解析数据。换句话说,当存储一个布尔字段时,例如,你真的只需要一个二进制位,但在CSV中,你必须存储"true","false"的完整字节或"0"或"1"的字符串,作为ASCII仍然是整整8位。另一方面,ORC和Parquet维护类型信息并支持列式下推 predicate ,以实现更快的分析(类似于RDBMS)Avro是基于行的格式。主要用于网络传输,而不是长期存储。Avro可以很容易地转换成Parquet。由于它仍然是类型化的和二进制的,它将比CSV消耗更少的空间,并且仍然比明文处理得更快。SequenceFiles是Hadoop的中间地带,但没有得到其他工具的广泛支持。
"true"
"false"
"0"
"1"
xa9qqrwz2#
二进制数据总是比相同的文本表示更快。Avro以二进制格式通过线路发送数据,并且也省略了密钥,从而使数据包大小更小。因此,avro适合更大的数据格式。
2条答案
按热度按时间8xiog9wr1#
首选数据格式的顺序(在Hadoop上下文中)通常是ORC、Parquet、Avro、SequenceFile,然后是PlainText。
反对CSV的主要原因是它只是一个字符串,这意味着通过根据文件编码(例如UTF8)存储所有字符,数据集会更大;不存在与数据相关联的类型信息或模式,并且在反序列化时将始终解析数据。换句话说,当存储一个布尔字段时,例如,你真的只需要一个二进制位,但在CSV中,你必须存储
"true"
,"false"
的完整字节或"0"
或"1"
的字符串,作为ASCII仍然是整整8位。另一方面,ORC和Parquet维护类型信息并支持列式下推 predicate ,以实现更快的分析(类似于RDBMS)
Avro是基于行的格式。主要用于网络传输,而不是长期存储。Avro可以很容易地转换成Parquet。由于它仍然是类型化的和二进制的,它将比CSV消耗更少的空间,并且仍然比明文处理得更快。
SequenceFiles是Hadoop的中间地带,但没有得到其他工具的广泛支持。
xa9qqrwz2#
二进制数据总是比相同的文本表示更快。Avro以二进制格式通过线路发送数据,并且也省略了密钥,从而使数据包大小更小。因此,avro适合更大的数据格式。