为什么 Apache-Spark - Python 在本地比 Pandas 慢? [英] Why is Apache-Spark - Python so slow locally as compared to pandas?
问题描述
这里是 Spark 新手.我最近开始使用以下命令在本地机器上的两个内核上使用 Spark:
A Spark newbie here. I recently started playing around with Spark on my local machine on two cores by using the command:
pyspark --master local[2]
我有一个 393Mb 的文本文件,其中几乎有一百万行.我想执行一些数据操作操作.我正在使用 PySpark 的内置数据帧函数来执行简单的操作,例如 groupBy
、sum
、max
、stddev
.
I have a 393Mb text file which has almost a million rows. I wanted to perform some data manipulation operation. I am using the built-in dataframe functions of PySpark to perform simple operations like groupBy
, sum
, max
, stddev
.
然而,当我在完全相同的数据集上对 pandas 执行完全相同的操作时,pandas 似乎在延迟方面以巨大的优势击败了 pyspark.
However, when I do the exact same operations in pandas on the exact same dataset, pandas seems to defeat pyspark by a huge margin in terms of latency.
我想知道这可能是什么原因.我有一些想法.
I was wondering what could be a possible reason for this. I have a couple of thoughts.
- 内置函数是否低效地执行序列化/反序列化过程?如果是,它们的替代方案是什么?
- 数据集是否太小以至于无法超过运行 spark 的底层 JVM 的开销成本?
感谢您的关注.非常感谢.
Thanks for looking. Much appreciated.
推荐答案
因为:
- Apache Spark 是一个复杂的框架,旨在将处理分布到数百个节点,同时确保正确性和容错性.这些属性中的每一个都有很高的成本.
- 因为纯粹的内存内核处理 (Pandas) 比磁盘和网络(甚至本地)I/O (Spark) 快几个数量级.
- 因为并行性(和分布式处理)会增加大量开销,即使是最佳(令人尴尬的并行工作负载)也不能保证任何性能改进.
- 因为本地模式不是为性能而设计的.它用于测试.
- 最后但并非最不重要的 - 在 393MB 上运行的 2 个内核不足以看到任何性能改进,并且单节点不提供任何分发机会
- 还有 Spark:在扩展内核数量方面的性能数据不一致、为什么 pyspark 在查找列的最大值时如此慢?, 为什么我的 Spark运行速度比纯 Python 慢?性能对比
你可以这样持续很长时间...
You can go on like this for a long time...
这篇关于为什么 Apache-Spark - Python 在本地比 Pandas 慢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!