这项工作由Anaconda Inc支持
Dask数据帧的性能与Pandas相比如何?Spark数据帧和Arrow又如何?它们之间有什么区别?
我每隔几周就会收到这个问题。写这篇文章是为了避免重复。
如果你来自Python并且数据集较小,那么Pandas是正确的选择。它易于使用,广泛理解,高效且维护良好。
使用像Dask数据帧或Spark数据帧这样的并行数据帧相比Pandas的性能优势(或劣势)会根据你进行的计算类型而有所不同
然而,可能需要配置。人们经常发现并行解决方案在首次尝试时未能达到预期。不幸的是,大多数分布式系统都需要一些配置才能实现最佳性能。
许多希望加速Pandas的人并不需要并行处理。通常还有其他一些技巧,例如编码文本数据、使用高效的文件格式、避免使用groupby.apply等,这些方法在加速Pandas方面比转向并行处理更有效。
假设是的,我确实想要并行处理,那么我应该选择Apache Spark还是Dask数据帧?
这通常更多是由文化偏好(JVM vs Python,一体化工具 vs 与其他工具集成)而不是性能差异决定的,但我将在此处尝试概述几点
总的来说,对于大多数操作,使用其中任何一个都没问题。人们通常基于文化偏好在Pandas/Dask和Spark之间进行选择。他们要么有真正喜欢Python生态系统的人,要么有真正喜欢Spark生态系统的人。
数据帧也只是每个项目的一小部分。Spark和Dask都做了很多不是数据帧的工作。例如,Spark有一个图分析库,Dask没有。Dask支持多维数组,Spark不支持。Spark通常更高层、一体化,而Dask更底层,专注于集成到其他工具中。
更多信息,请参阅Dask的“与Spark的比较文档”。
Arrow怎么样?Arrow比Pandas快吗?
这个问题目前还不太有意义... 尚不。
Arrow不是Pandas的替代品。今天,Arrow对构建系统的人有用,而不是直接对像Pandas那样的分析师有用。Arrow用于在不同的计算系统和文件格式之间移动数据。Arrow今天不做计算,但通常作为其他进行计算的库中的组件使用。例如,如果你今天使用Pandas、Spark或Dask,你可能正在使用Arrow而不知道。今天,Arrow对其他库更有用,而不是对最终用户。
然而,这种情况将来可能会改变。Arrow开发者计划围绕Arrow编写计算代码,我们预计这些代码会比Pandas或Spark中的代码更快。不过,这可能还需要一到两年。可能会有一些努力使其与Pandas半兼容,但这现在还为时过早。