Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 火花:Avro vs拼花地板性能_Apache Spark_Avro_Parquet - Fatal编程技术网

Apache spark 火花:Avro vs拼花地板性能

Apache spark 火花:Avro vs拼花地板性能,apache-spark,avro,parquet,Apache Spark,Avro,Parquet,现在Spark 2.4已经内置了对Avro格式的支持,我正在考虑将我的数据池中一些数据集的格式从拼花地板更改为Avro,这些数据集通常是针对整行而不是特定的列聚合进行查询/连接的 然而,数据之上的大部分工作都是通过Spark完成的,据我所知,Spark的内存缓存和计算是在列格式的数据上完成的。拼花地板是否在这方面提供了性能提升,而Avro会招致某种数据“转换”惩罚?在这方面,我还需要注意什么呢?这两种格式都有不同的约束,但都有一些共同点,比如带有模式的强类型和二进制编码。在其基本形式上,它归结为

现在Spark 2.4已经内置了对Avro格式的支持,我正在考虑将我的数据池中一些数据集的格式从拼花地板更改为Avro,这些数据集通常是针对整行而不是特定的列聚合进行查询/连接的


然而,数据之上的大部分工作都是通过Spark完成的,据我所知,Spark的内存缓存和计算是在列格式的数据上完成的。拼花地板是否在这方面提供了性能提升,而Avro会招致某种数据“转换”惩罚?在这方面,我还需要注意什么呢?

这两种格式都有不同的约束,但都有一些共同点,比如带有模式的强类型和二进制编码。在其基本形式上,它归结为这种区别:

  • Avro是一种行格式。因此,您可以将一行一行附加到现有文件中。然后,处理这些文件的所有读卡器也可以立即看到这些行式附录。当您有一个以流式(非批处理)方式写入数据湖的进程时,Avro是最好的
  • Parquet是一种柱状格式,其文件不可追加。这意味着对于新到达的记录,您必须始终创建新文件。作为这种行为的交换,拼花地板带来了几个好处。数据以列方式存储,并对每列应用压缩和编码(简单的类型识别、低cpu但高效的压缩)。因此,拼花地板文件将比Avro文件小得多。此外,Parquet还会写出基本的统计信息,当您从中加载数据时,您可以将部分选择下推到I/O。然后,仅从磁盘加载必要的行集。由于拼花地板已经是柱状的,而且大多数内存结构也将是柱状的,因此从它们加载数据通常要快得多
由于您已经对数据和摄取过程进行了调整,以编写拼花文件,只要数据摄取(延迟)不会成为您的问题,您最好继续使用拼花


一个典型的用法实际上是将拼花地板和Avro混合使用。最近新到达的数据存储为Avro文件,因为这使数据立即可供数据湖使用。更多的历史数据(例如每天)转换为拼花地板文件,因为这些文件较小且加载效率最高,但只能成批写入。在处理这些数据时,您可以将它们作为两个表的并集加载到Spark中。因此,您可以使用拼花地板进行高效读取,并使用Avro立即获得数据。这种模式通常被Netflix启动的或等表格格式所隐藏。

问题的一部分不是问这个问题,但提到ORC也可能有用。那么KUDU呢?