当前位置: 首页 > 面试题库 >

为什么与熊猫相比,Apache-Spark-Python在本地这么慢?

严昊昊
2023-03-14
问题内容

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

pyspark --master local[2]

我有一个393Mb的文本文件,其中包含近一百万行。我想执行一些数据操作操作。我使用的是内置PySpark的数据帧的功能进行简单的操作,如groupBysummaxstddev

但是,当我在完全相同的数据集上对熊猫进行完全相同的操作时,就延迟而言,熊猫似乎在很大程度上击败了pyspark。

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

  1. 内置函数是否会使序列化/反序列化过程效率低下?如果是,那么还有哪些替代方案?
  2. 数据集是否太小以至于不能超过运行spark的基础JVM的开销成本?

感谢您的光临。非常感激。


问题答案:

因为:

  • Apache Spark是一个复杂的框架,旨在在确保正确性和容错性的同时在数百个节点之间分布处理。这些属性中的每一个都有很高的成本。
  • 因为纯粹的内存中内核处理(Pandas)比磁盘和网络(甚至是本地)I / O(Spark)要快几个数量级。
  • 因为并行性(和分布式处理)会增加大量开销,即使优化(增加并行工作量)也无法保证任何性能改进。
  • 因为本地模式不是为提高性能设计的。用于测试。
  • 最后但并非最不重要的一点-运行在393MB上的2个内核不足以看到任何性能改进,并且单节点没有提供任何分发机会

你可以这样持续很长时间



 类似资料:
  • 内置函数是否低效地执行序列化/反序列化过程?如果是,有哪些替代方案? 数据集是否太小,以至于无法超过运行spark的底层JVM的开销? 谢谢你找我。非常感谢。

  • 问题内容: 从2010年的计算机语言基准游戏中可以看出: Go平均比C慢10倍 Go比Java慢3倍! 考虑到Go编译器会生成要执行的本机代码,这怎么可能? Go的编译器不成熟?还是Go语言存在一些内在问题? 编辑: 大多数答案否认Go语言的内在缓慢,声称问题出在不成熟的编译器中。 因此,我进行了一些自己的测试来计算斐波那契数:迭代算法在Go(freebsd,6g)中以与C(带有O3选项)一样的速

  • 问题内容: 我有一个熊猫数据框,我想根据是否满足某些条件进行过滤。我跑了一个循环,然后用来测试速度。数据集大约有45000行。循环的代码片段为: 每个循环1.44 s±3.7毫秒(平均±标准偏差,共7次运行,每个循环1次) 而且是: 每个循环6.71 s±54.6 ms(平均±标准偏差,共7次运行,每个循环1次) 我认为应该比循环遍历大熊猫更快。有人可以解释为什么在这种情况下速度变慢吗? 问题答案

  • 问题内容: 我想迭代地构建稀疏矩阵,并注意到根据SciPy文档,有两种合适的选择: LiL矩阵: 类scipy.sparse.lil_matrix(arg1,shape = None,dtype = None,copy = False)[源]基于行的链表稀疏矩阵 这是用于增量构造稀疏矩阵的有效结构。 DoK矩阵: 类scipy.sparse.dok_matrix(arg1,shape = None

  • 问题内容: IDLE是我最喜欢的Python编辑器。它提供了非常漂亮和直观的Python shell,它对单元测试和调试非常有用,并且还提供了一个简洁的调试器。 但是,在IDLE下执行的代码异常缓慢。 疯狂是指慢 三个数量级 : 重击 需要0.052秒, 闲 需要: 大约慢了2000倍。 有什么想法或想法可以改善这一点吗?我想这与后台调试器有关,但是我不确定。 亚当 问题答案: 问题是文本输出而不

  • 问题内容: 下面是分别用和编码的简单过程(对于那些对此过程感到好奇的人,这是针对Euler项目5号问题的解决方案)。 我的问题是,下面的代码仅需9秒即可迭代,而代码完成则需要283秒(确切地说,在Python 3.4.3-64位上为283秒,在Python 2.7.9-32位上为329秒)。 到目前为止,我已经编码的两种类似的过程和与执行时间的差异,具有可比性。但是,这次,经过的时间之间存在极大的