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

时间:2017-04-28 17:08:37

标签: pandas max spark-dataframe

是否有一般性解释,为什么spark需要更多时间来计算列的最大值? 我导入了Kaggle Quora训练集(超过400,000行),我喜欢在行方向特征提取时火花正在做什么。但现在我想“手动”缩放列:找到列的最大值并除以该值。 我尝试了Best way to get the max value in a Spark dataframe columnhttps://databricks.com/blog/2015/06/02/statistical-and-mathematical-functions-with-dataframes-in-spark.html的解决方案 我也尝试了df.toPandas(),然后计算了熊猫的最大值(你猜对了,df.toPandas花了很长时间。) 我唯一尝试过的就是RDD方式。

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

  • 你能给我一个指向讨论这种差异的文章的指针吗?
  • 对我的计算机上的内存限制比大熊猫更敏感吗?

2 个答案:

答案 0 :(得分:0)

正如@MattR在评论中已经说过 - 你应该使用Pandas unless there's a specific reason to use Spark

通常您不需要Apache Spark,除非您遇到带有Pandas的MemoryError。但是如果一台服务器的RAM不够用,那么Apache Spark就是您的最佳选择。 Apache Spark有一个开销,因为它需要首先拆分你的数据集,然后处理那些分布式的块,然后处理和加入"处理"数据,将其收集在一个节点上并将其返回给您。

答案 1 :(得分:0)

@MaxU,@ Matt,我找到了一个中间解决方案,这也让我重新评估了Sparks的懒惰并更好地理解了这个问题。

sc.accumulator帮助我定义一个全局变量,并且使用单独的AccumulatorParam对象,我可以动态计算列的最大值。

在测试中我注意到Spark比预期的更加懒散,所以我的原始帖子“我喜欢在行方式特征提取时所做的事情”的这一部分归结为'我喜欢Spark什么都不做快”。

另一方面,用于计算列最大值的大部分时间大概是计算中间值。

感谢您的输入,这个主题让我更加了解Spark。