gpt4 book ai didi

apache-spark - Spark : Avro vs Parquet performance

转载 作者:行者123 更新时间:2023-12-01 09:13:01 25 4
gpt4 key购买 nike

现在 Spark 2.4 内置了对 Avro 格式的支持,我正在考虑更改我的数据湖中一些数据集的格式——那些通常为整行而不是特定列聚合查询/连接的数据集——从 Parquet 到阿夫罗。

然而,数据之上的大部分工作都是通过 Spark 完成的,据我所知,Spark 的内存缓存和计算是在列格式数据上完成的。 Parquet 是否在这方面提供了性能提升,而 Avro 会招致某种数据“转换”惩罚?在这方面,我还应该注意哪些其他注意事项?

最佳答案

两种格式在不同的约束下都表现出色,但都具有诸如具有模式的强类型和共同的二进制编码之类的东西。在其基本形式中,它归结为以下区别:

  • 阿夫罗 是一种逐行格式。因此,您可以将一行一行地附加到现有文件中。然后,所有处理这些文件的读者也可以立即看到这些按行追加的内容。当您有一个以流式(非批处理)方式写入数据湖的进程时,Avro 是最佳选择。
  • Parquet 是一种柱状格式,其文件不可追加。这意味着对于新到达的记录,您必须始终创建新文件。作为这种行为的交换,Parquet 带来了几个好处。数据以列方式存储,压缩和编码(简单的类型感知、低 CPU 但高效的压缩)应用于每一列。因此 Parquet 文件将比 Avro 文件小得多。 Parquet 还写出基本统计信息,当您从中加载数据时,您可以将部分选择下推到 I/O。然后只从磁盘加载必要的行集。由于 Parquet 已经采用柱状方式并且大多数内存中的结构也将是柱状的,因此从它们加载数据通常要快得多。

  • 由于您已经将数据和摄取过程调整为写入 Parquet 文件,因此最好继续使用 Parquet,只要数据摄取(延迟)不会成为您的问题。

    典型的用法实际上是混合使用 Parquet 和 Avro。最近,新到达的数据存储为 Avro 文件,因为这使数据可以立即用于数据湖。更多的历史数据被转换为例如每天写入 Parquet 文件,因为它们更小,加载效率最高,但只能批量写入。在处理这些数据时,您可以将它们作为两个表的并集加载到 Spark 中。因此,您可以享受 Parquet 的高效读取以及 Avro 数据的即时可用性。这种模式通常被 Uber's Hudi 等表格格式所隐藏。或 Apache Iceberg (incubating)这是由 Netflix 发起的。

    关于apache-spark - Spark : Avro vs Parquet performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53571888/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com