Apache Arrow 是一种开源的列式内存格式,适用于扁平数据和层次化数据。在 现代数据湖 中,像 Apache Arrow 这样的开放数据格式存在于现代对象存储的存储层中。这些格式成为对象存储中的对象。
在 Apache Arrow 的 最新版本 中,宣布了将 Apache Arrow 与 Apache DataFusion 分离的计划。Apache DataFusion 是自 2019 年 2 月以来一直与 Arrow 绑定在一起的查询执行框架。这两个项目都将升级到 Apache 软件基金会中的顶级项目。贡献者 解释 说,随着这两个项目的不断发展,它们已经变得不同。虽然 DataFusion 仍然依赖于 Arrow,但反过来却不能这么说。这一举措表明 Arrow 在数据社区中的成熟度和广泛应用。本博文旨在重点介绍这些贡献。
了解 Apache Arrow
Arrow 格式旨在优化各种数据系统中的数据处理和分析操作。这意味着 Arrow 被设计为与许多不同的处理引擎一起使用,这对于处理大量复杂、半结构化数据且具有多种用例的数据湖来说至关重要。
Apache Arrow 的性能非常出色,这主要归功于它的列式数据格式,该格式最大限度地减少了对数据序列化和反序列化的需求。这种格式不仅能促进更快的访问速度,还能支持对数据湖进行实时分析。此外,Arrow 使用内存映射可以让数据集以内存映射的磁盘缓存为后盾,从而实现快速数据检索。此功能在 内存有限 的环境中特别有效,可以有效地处理大型数据集。这些属性使 Arrow 成为现代数据架构中的一个基本组件,特别是在增强不同数据环境中的互操作性和计算效率方面。
Apache Arrow 的主要优势
开源: 我们长期以来一直支持 现代数据栈中的开放性。这在很大程度上是因为 开源催生开源,因为协作推动了创新。对于像 Apache Arrow 这样的开放标准来说尤其如此,因为它们在加速数据生态系统内的创新方面发挥着至关重要的作用。通过为互操作性提供一个通用框架,开放标准使开发人员能够更有效地协作,并避免在重新发明解决方案方面进行重复性的努力。这反过来又培养了一种创新文化,在这种文化中,思想可以被共享和建立,从而推动持续的进步和发展。
性能: 通过采用 Arrow,组织可以跨不同系统无缝交换数据,而不会产生与序列化和反序列化相关的性能成本。当然,没有什么能像 性能 一样完美地补充性能。
简化的集成: Arrow 提供的标准化降低了集成不同工具的复杂性,使开发人员能够专注于构建强大的解决方案,而不是处理集成挑战。 云原生 项目、框架和软件在设计上开箱即用。
采用 Apache Arrow 的著名项目
Apache Arrow 在各种项目中获得了广泛采用。我们已经写过一些,包括与 Spark 和 R 的集成,但还有很多其他项目,包括但不限于
- Polars: 是一个用 Rust 编写的超快 DataFrame 库,它利用 Arrow 的列式存储格式来进行高效的数据处理,从而提高性能和可扩展性。Polars 与 Apache Arrow 的集成强化了现代数据湖基础设施的基础,使高速数据操作和分析成为可能。
- DuckDB: 与 Apache Arrow 无缝集成,实现高效的数据交换,从而实现快速的数据传输和分析。这种集成在现代数据湖基础设施中发挥着关键作用,促进跨不同数据集的快速数据处理和查询执行。
- ClickHouse: 是一种开源分析型数据库管理系统,以其在实时查询处理方面的出色性能而闻名。它利用 Apache Arrow 来增强其操作的多个方面,主要集中在数据导入和导出,以及启用直接查询功能。
- PySpark: 利用 Apache Arrow 的列式数据表示来进行高效的数据处理,从而提高性能和可扩展性。PySpark 与 Apache Arrow 的无缝集成支撑着现代数据湖基础设施,使组织能够轻松构建健壮且可扩展的数据处理管道。
- Pandas: 得益于 Arrow 高效的内存布局和互操作性,能够在现代数据湖栈中与其他系统和语言进行无缝数据交换。
- Ray: 是一种分布式计算框架,它利用 Apache Arrow 来实现分布式任务之间高效的数据序列化和传输。这种集成增强了 Ray 的性能和可扩展性,使用户能够轻松构建和部署分布式应用程序。
- delta-rs: 是一种开源 Rust 库,为 Delta Lake 提供了原生的 Rust 实现。delta-rs 使用 Arrow 在内部存储和管理数据,这使得对 Delta Lake 表进行快速、高效的操作成为可能,尤其是在处理大型数据集时。
- iceberg-arrow: 是一种 Iceberg 表支持库,允许将 Parquet 读取到 Arrow 内存中。它的性能与默认的 Parquet 矢量化读取器相同或更好。
- Hugging Face Datasets 使用 Arrow 作为其磁盘缓存系统,这使得大型数据集可以存储在内存有限的系统中的本地磁盘上。磁盘缓存被内存映射,以便进行高效的查找。
- RAPIDS: 是一套用于 GPU 加速数据科学和分析的开源库,它利用 Apache Arrow 在 GPU 加速数据处理任务之间实现互操作性。这种集成使 RAPIDS 能够利用 Arrow 高效的列式格式来进行 GPU 上的高速数据处理。
虽然这些项目代表了采用 Apache Arrow 的庞大生态系统的一部分,但它们体现了该标准在不同领域和用例中的多功能性和适应性。
开源标准
Apache Arrow 是开放标准在推动现代数据湖中的互操作性和创新方面力量的证明。随着组织继续在其栈中利用开放标准的功能,人工智能和分析领域取得变革性进展的潜力仍然无限。请告诉我们在 hello@min.io 或我们的 Slack 频道上你正在构建什么。