为啥 Apache-Spark - Python 在本地比 pandas 慢?

Posted

技术标签:

【中文标题】为啥 Apache-Spark - Python 在本地比 pandas 慢?【英文标题】:Why is Apache-Spark - Python so slow locally as compared to pandas?为什么 Apache-Spark - Python 在本地比 pandas 慢? 【发布时间】:2018-02-15 20:01:46 【问题描述】:

这里是 Spark 新手。 我最近开始在本地机器上使用以下命令在两个内核上使用 Spark:

pyspark --master local[2]

我有一个 393Mb 的文本文件,其中有将近一百万行。我想执行一些数据操作操作。我正在使用 PySpark 的内置数据框函数来执行简单的操作,例如 groupBysummaxstddev

但是,当我在 pandas 中对完全相同的数据集执行完全相同的操作时,pandas 似乎在延迟方面以巨大的优势击败了 pyspark。

我想知道这可能是什么原因。我有几个想法。

    内置函数在序列化/反序列化过程中效率低下吗?如果是,它们的替代品是什么? 数据集是否太小以至于无法超过运行 spark 的底层 JVM 的开销成本?

感谢收看。非常感谢。

【问题讨论】:

对这么小的数据集使用 Apache Spark 是否有意义? Pandas 非常快,但无法扩展。您想使用它而不是 Spark,除非您遇到 MemoryError 我完全同意。我目前正在尝试它。这就是这个问题的原因。 【参考方案1】:

因为:

Apache Spark 是一个复杂的框架,旨在将处理分布在数百个节点上,同时确保正确性和容错性。这些属性中的每一个都具有很高的成本。 因为纯内存中的核心处理 (Pandas) 比磁盘和网络(甚至是本地)I/O (Spark) 快几个数量级。 因为并行性(和分布式处理)会增加大量开销,而且即使使用最佳(令人尴尬的并行工作负载)也不能保证任何性能改进。 因为本地模式不是为性能而设计的。它用于测试。 最后但并非最不重要的一点 - 在 393MB 上运行 2 个内核不足以看到任何性能改进,并且单节点不提供任何分发机会 还有Spark: Inconsistent performance number in scaling number of cores、Why is pyspark so much slower in finding the max of a column?、Why does my Spark run slower than pure Python? Performance comparison

你可以这样持续很长时间......

【讨论】:

以上是关于为啥 Apache-Spark - Python 在本地比 pandas 慢?的主要内容,如果未能解决你的问题,请参考以下文章

Apache-Spark 的 GBT 和 sklearn 的 AUC 差异

Apache-Spark 作为日志存储

如何获取有关当前执行程序 Apache-Spark 的元数据?

如何在 Apache-Spark 2.x 中使用 java 进行增量序列

使用 Apache-Spark 到 Redshift 的 MongoDB 数据管道

对象内部定义的 Apache-Spark UDF 引发“没有可用于字符串的 TypeTag”