比较 Pandas、Polars 和 PySpark:基准分析

比较 Pandas、Polars 和 PySpark 三种工具的不同数据集,得出数据处理未来发展方向的结论。

Pandas
Pandas 一直是数据操作、探索和分析的主要工具。由于 Pandas 与 R 网格视图的相似性,它在数据科学家中越来越受欢迎。而且,它与机器学习领域相关的其他Python库同步:

  • NumPy是一个用于实现线性代数和标准计算的数学库。 Pandas 基于 NumPy。
  • Scikit-learn是机器学习应用程序的参考库。通常,模型使用的所有数据都已使用 Pandas 或 NumPy 加载、可视化和分析。

pySpark
Spark 是一个免费的分布式平台,它以 PySpark 作为其Python库,改变了大数据处理的范式。它提供了具有卓越功能的统一计算引擎:

  • 内存处理:Spark 的主要特性是其内存架构,由于它将数据保存在内存中而不是磁盘上,因此速度很快。
  • 容错:软件内置的容错机制确保可靠的数据处理。弹性分布式数据集进行数据跟踪,并允许在发生故障等故障时自动恢复。
  • 可扩展性:Spark 的水平可扩展架构能够自适应地处理大型数据集,并更快地将数据分发到集群。数据是分布式的,利用集群中所有节点的巨大力量。

Polars
Polars 是一个基于 Rust 构建的 Python 库,将 Python 的灵活性和用户友好性与 Rust 的速度和可扩展性结合起来。 Rust 是一种低级语言,优先考虑性能、可靠性和生产力。它内存效率高,性能与 C 和 C++ 相当。

另一方面,Polars 使用 Apache Arrow 作为查询引擎来执行矢量化查询。 Apache Arrow 是一个用于快速内存处理的跨语言开发平台。
Polars 可以即时执行表格数据操作、分析和转换操作,有利于大型数据集的使用。

此外,它的语法类似于SQL,数据处理的表达复杂性很容易展示。另一个能力是它的惰性,即评估查询并应用查询优化。

测试性能
设置
是包含所有信息的 GitHub 项目的链接。
每个工具有四个笔记本(两个用于极坐标,用于测试急切和惰性评估)。
该代码将提取以下任务的执行时间:

  • Reading
  • Filtering
  • Aggregations
  • Joining
  • Writing

分析

  • Pandas 的性能很差,尤其是当数据集规模增大时。不过,它在处理小型数据集时表现尚可。
  • PySpark 虽然是在单机上执行,但当数据集规模增大时,其性能比 Pandas 有了显著提高。
  • Polars 无论是在急迫配置还是在懒惰配置下,都明显优于其他工具,与 Pandas 相比提高了 95-97%,与 PySpark 相比提高了 70-75%,这证实了它在单机上处理大型数据集的效率。

结论
所提供的基准测试结果让我们清楚地了解了四种广泛使用的数据处理工具在不同数据集规模下的性能可扩展性。分析得出了几个重要结论:

  • Pandas 性能可扩展性:Pandas 在较小数据集的数据处理方面很受欢迎,但随着数据量的增加,它的性能就会大打折扣,这表明它并不是处理大容量数据的最佳工具。不过,它集成了大量机器学习和定态库,是数据科学团队不可或缺的工具。
  • Polars 的效率:Polars 的配置(Eager 和 Lazy)在所有测试规模中都表现出卓越的性能,远远超过 Pandas 和 PySpark,使 Polars 成为能够处理大型数据集的高效工具。不过,Polars 尚未发布 Python 的主要版本,在此之前,我不建议在生产系统中使用它。
  • 工具选择战略:研究结果强调了根据项目的具体需求和可用资源选择合适工具的重要性。对于中小型数据集,Polars 具有显著的性能优势。对于大规模分布式处理,PySpark 仍然是一个可靠的选择。
  • 未来考虑:随着数据集规模的不断扩大和处理需求的增加,数据处理工具的选择将变得更加重要。在 Rust 基础上构建的 Polars 等工具正在出现,其结果必须加以考虑。此外,将 Spark 作为处理一切问题的解决方案的趋势正在消失,当不需要大规模分布式系统时,这些工具将取而代之。