这里是 Spark 新手。 我最近开始在本地机器上使用以下命令在两个内核上使用 Spark:
pyspark --master local[2]
我有一个 393Mb 的文本文件,其中有将近一百万行。我想执行一些数据操作操作。我正在使用 PySpark 的内置数据框函数来执行简单的操作,例如 groupBy
、sum
、max
、stddev
.
但是,当我在 pandas 中对完全相同的数据集执行完全相同的操作时,pandas 似乎在延迟方面以巨大的优势击败了 pyspark。
我想知道这可能是什么原因。我有几个想法。
- 内置函数在序列化/反序列化过程中效率低下吗?如果是,它们的替代品是什么?
- 数据集是否太小以至于无法超过运行 spark 的底层 JVM 的开销成本?
感谢收看。非常感谢。
最佳答案
因为:
- 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
你可以这样持续很长时间......
关于python - 为什么 Apache-Spark - Python 在本地比 pandas 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48815341/