是否有一般性解释,为什么spark需要更多时间来计算列的最大值? 我导入了Kaggle Quora训练集(超过400,000行),我喜欢在行方向特征提取时火花正在做什么。但现在我想“手动”缩放列:找到列的最大值并除以该值。 我尝试了Best way to get the max value in a Spark dataframe column和https://databricks.com/blog/2015/06/02/statistical-and-mathematical-functions-with-dataframes-in-spark.html的解决方案 我也尝试了df.toPandas(),然后计算了熊猫的最大值(你猜对了,df.toPandas花了很长时间。) 我唯一尝试过的就是RDD方式。
在我提供一些测试代码之前(我必须找出如何在spark中生成虚拟数据),我想知道
答案 0 :(得分:0)
正如@MattR在评论中已经说过 - 你应该使用Pandas unless there's a specific reason to use Spark
。
通常您不需要Apache Spark,除非您遇到带有Pandas的MemoryError
。但是如果一台服务器的RAM不够用,那么Apache Spark就是您的最佳选择。 Apache Spark有一个开销,因为它需要首先拆分你的数据集,然后处理那些分布式的块,然后处理和加入"处理"数据,将其收集在一个节点上并将其返回给您。
答案 1 :(得分:0)
sc.accumulator帮助我定义一个全局变量,并且使用单独的AccumulatorParam对象,我可以动态计算列的最大值。
在测试中我注意到Spark比预期的更加懒散,所以我的原始帖子“我喜欢在行方式特征提取时所做的事情”的这一部分归结为'我喜欢Spark什么都不做快”。
另一方面,用于计算列最大值的大部分时间大概是计算中间值。
感谢您的输入,这个主题让我更加了解Spark。