Pandas 为什么pyspark在求列的最大值时要慢得多?

Pandas 为什么pyspark在求列的最大值时要慢得多?,pandas,max,spark-dataframe,Pandas,Max,Spark Dataframe,是否有一个一般性的解释,为什么spark需要更多的时间来计算列的最大值? 我导入了Kaggle Quora训练集(超过400.000行),我喜欢spark在行特征提取方面所做的工作。但现在我想“手动”缩放列:找到列的最大值并除以该值。 我尝试了来自和的解决方案 我还尝试了df.toPandas(),然后计算了熊猫的最大值(你猜对了,df.toPandas花了很长时间。) 我唯一没有尝试的是RDD方式 在我提供一些测试代码之前(我必须了解如何在spark中生成虚拟数据),我想知道 你能给我一篇讨

是否有一个一般性的解释,为什么spark需要更多的时间来计算列的最大值? 我导入了Kaggle Quora训练集(超过400.000行),我喜欢spark在行特征提取方面所做的工作。但现在我想“手动”缩放列:找到列的最大值并除以该值。 我尝试了来自和的解决方案 我还尝试了df.toPandas(),然后计算了熊猫的最大值(你猜对了,df.toPandas花了很长时间。) 我唯一没有尝试的是RDD方式

在我提供一些测试代码之前(我必须了解如何在spark中生成虚拟数据),我想知道

  • 你能给我一篇讨论这种差异的文章的指针吗
  • spark比pandas对我电脑上的内存限制更敏感吗
正如@MattR在评论中所说的那样-除非有特定的理由使用Spark,否则您应该使用Pandas


通常您不需要ApacheSpark,除非您在Pandas中遇到
MemoryError
。但是,如果一台服务器的RAM不够,那么ApacheSpark就是适合您的工具。ApacheSpark有一个开销,因为它需要先拆分数据集,然后处理这些分布的数据块,然后处理并加入“已处理”的数据,在一个节点上收集数据并返回给您。

@MaxU,@MattR,我找到了一个中间解决方案,它还可以让我重新评估Sparks的惰性并更好地理解这个问题

acculator帮助我定义一个全局变量,通过一个单独的acculatorParam对象,我可以动态计算列的最大值

在测试过程中,我注意到Spark比预期的更懒惰,所以我的原始帖子“我喜欢Spark在行特征提取方面所做的事情”的这一部分归结为“我喜欢Spark没有做什么很快”

另一方面,在计算柱的最大值上花费的大量时间很可能是计算中间值


感谢您的参与,本主题让我对Spark有了更深入的了解。

您看了吗?另外,我的$0.02是使用熊猫,除非有特殊原因使用Spark。熊猫在它的简单性和力量上是不可思议的。也是索厄尔的另一篇帖子,我现在的理由是我想学习火花:-)谢谢你的链接。KDNugget的文章很有趣,但是比较老。我在玩Kaggle数据集,因为它太大了,无法在我的笔记本电脑上运行,我不得不做一些调整以避免太多的内存交换。所以我觉得火花可能很有趣。在逐行计算中,它似乎效果更好。但当需要整个数据帧时就不需要了。(我现在也尝试了rdd方法,但也没有什么帮助)看起来我必须深入研究才能更好地理解。说实话,我从未使用过Spark。内存相对便宜,任何拥有“大数据”的公司通常只需增强服务器并使用当前的解决方案即可运行。你用过它吗@MaxU?@MattR,我用过它,但有几次。。。如果需要处理5-500TB的数据怎么办?;-)<代码>熊猫。读取\u csv('PATH',chunksize=xxxxxxx)
?哈哈,但是说真的,我想这是有道理的。但在我的职业生涯中,我从未需要处理这么多数据。这可能有点离题,但您是否从Scala或Python运行了Spark?如果是Python,你有什么好的链接到你学习的地方吗?我已经在我的16GiB RAM笔记本上多次在熊猫中遇到了
MemoryError
。。。我使用PySpark,因为Spark SQL数据帧与DFs非常相似