Daft 是一个由 Eventual-Inc 开发的分布式查询引擎,旨在为任何模态和规模的数据提供简单可靠的处理方案。它支持用户通过 Python 或 SQL 进行大规模数据处理,其核心实现基于 Rust 语言。Daft 致力于在数据分析、工程以及机器学习/人工智能领域提供统一且高效的解决方案。

Daft 的核心特性

Daft 引擎融合了多项强大功能,使其在数据处理领域脱颖而出:

  • 熟悉的交互式 API:Daft 提供了一套用户友好的 API,包括用于快速交互式迭代的延迟执行 Python Dataframe,以及用于分析查询的 SQL 接口。这使得不同背景的用户都能轻松上手。
  • 关注“做什么”:Daft 内置了强大的查询优化器,能够自动重写查询,使其执行效率达到最高。用户只需定义他们想要实现的目标,Daft 就会负责优化执行路径。
  • 数据目录集成:它与 Apache Iceberg 等主流数据目录实现了全面集成,方便用户管理和查询其数据资产。
  • 丰富的多模态类型系统:Daft 不仅仅处理传统的字符串、数字和日期等数据类型。其基于 Apache Arrow 的内存表示能够高效支持图像、URL、张量等复杂或嵌套的多模态数据类型。这使得多模态数据的摄取和基本转换变得极其简单且高性能。
  • 无缝数据交换:Daft 构建在 Apache Arrow 内存格式之上,确保了与其他数据处理工具之间的高效数据交换和互操作性。
  • 为云而生:Daft 针对云环境进行了优化,与 S3 等云存储服务集成时,展现出卓越的 I/O 性能。

Daft 的设计理念

Daft 在设计时,遵循了以下三大核心原则:

1. 任意数据 (Any Data)

Daft 超越了传统数据处理引擎的限制,不仅能够处理常见的结构化数据,还能高效地处理各种复杂和非结构化数据。无论是图像、嵌入向量,还是定制的 Python 对象,Daft 的基于 Arrow 的内存表示都能以高性能的方式进行存储和操作。这极大地简化了多模态数据的摄取和转换过程,为机器学习和人工智能应用提供了坚实的基础。

2. 交互式计算 (Interactive Computing)

为了提供卓越的开发者体验,Daft 专注于交互式计算场景,如 Jupyter Notebooks 或 REPLs。通过智能缓存和查询优化,Daft 显著加快了实验和数据探索的速度,让开发者能够更快速地迭代和验证想法。

3. 分布式计算 (Distributed Computing)

面对日益增长的数据规模,单机资源往往不足以应对。Daft 通过与 Ray 等分布式计算框架的本地集成,使得数据帧能够在大规模集群(拥有数千个 CPU/GPU)上运行。这意味着用户可以轻松地将工作负载从本地笔记本扩展到大规模分布式环境,而无需修改核心代码。

快速入门

安装 Daft 非常简单,只需通过 pip 命令即可完成:

pip install daft

对于更高级的安装(例如从源代码安装,或安装 Ray、AWS 工具等额外依赖),用户可以参考官方的安装指南。

快速示例

通过 Daft,用户可以轻松处理云存储中的多模态数据。例如,从 AWS S3 存储桶中加载图像 URL,然后对这些图像进行下载、解码和尺寸调整,最终在一个数据帧中展示处理结果。这个过程仅需几行 Python 代码即可完成,Daft 将负责所有分布式执行和优化。

性能基准

Daft 在性能方面表现出色。例如,在 SF100 TPC-H 基准测试中,Daft 展示了其强大的数据处理能力。用户可以访问官方的基准测试页面,查看详细的设置和日志,深入了解 Daft 的卓越性能表现。

更多资源

Daft 提供了全面的文档和资源,帮助用户充分利用其功能:

  • Daft 快速入门:详细介绍了 Daft 的各项功能,包括从 URL 加载数据、连接操作、用户定义函数 (UDF)、分组和聚合等。
  • 用户指南:深入探讨了 Daft 中的每个主题,为用户提供详尽的指导。
  • API 参考:提供了 Daft 公开类和函数的详细 API 文档。
  • SQL 参考:Daft SQL 接口的详细参考资料。

贡献方式

Daft 社区欢迎全球开发者的加入。如果您有兴趣为 Daft 贡献代码,请查阅贡献指南。该文档详细介绍了在 Daft 上进行开发所需的生命周期和工具链,并说明了如何向核心引擎添加新功能并通过 Python API 进行公开。社区还提供了一系列“良好入门问题”,帮助新贡献者熟悉项目并快速上手。

遥测数据

为了持续改进 Daft,项目会通过 Scarf 收集非识别性数据。收集的数据包括:

  1. 非识别性:事件通过会话 ID 标识,该 ID 在导入 Daft 时生成,不包含任何个人身份信息。
  2. 仅元数据:Daft 不会收集用户的专有代码或数据。
  3. 仅用于开发:收集到的数据仅用于产品开发,不会被出售或用于其他商业目的。

如果用户希望禁用此行为,只需设置环境变量 DO_NOT_TRACK=true 即可。更多详细信息,请参阅官方文档中的遥测部分。

相关项目对比

Daft 在设计上吸取了现有数据处理引擎的优点,并在此基础上进行了创新。以下是 Daft 与其他流行引擎的对比:

  • Pandas:Pandas 是一个单机数据帧库,不具备查询优化器,对多模态数据主要通过 Python 对象支持,不支持分布式计算,可选支持 Apache Arrow 格式,部分操作向量化,但不具备核外处理能力。
  • Polars:Polars 是一款高性能的单机数据帧库,拥有查询优化器,多模态数据处理通过 Python 对象实现,不支持分布式计算,但完全基于 Apache Arrow,具有向量化执行引擎和核外处理能力。
  • Modin:Modin 旨在提供 Pandas API 的分布式实现,拥有查询优化器,多模态数据处理通过 Python 对象支持,支持分布式计算,但不是基于 Apache Arrow,其向量化执行依赖 Pandas,并支持核外处理。
  • PySpark:PySpark 是 Apache Spark 的 Python API,拥有强大的查询优化器,支持分布式计算和核外处理,但原生对多模态数据的支持有限,主要通过 Pandas UDF 或 I/O 实现。
  • Dask DF:Dask Dataframe 提供了一个类似 Pandas 的分布式数据帧,但缺乏内置的查询优化器,多模态数据处理通过 Python 对象实现,支持分布式计算和核外处理,其向量化执行依赖 Pandas。

相比之下,Daft 融合了查询优化器、丰富的多模态类型支持、原生分布式能力、基于 Apache Arrow 的无缝集成、向量化执行引擎以及核外处理能力,使其在处理各种复杂和大规模数据场景时更具优势。

许可协议

Daft 采用 Apache 2.0 许可协议。更多详细信息,请查阅项目的 LICENSE 文件。

Daft 作为一款创新的分布式查询引擎,为数据分析、工程和 ML/AI 带来了全新的可能性。其结合了易用性、高性能和强大的多模态处理能力,有望成为未来数据科学工作流中的关键工具。

查看更多详情