我不确定在进行聚合操作时是否应该增加或减少分区数。让我们说我正在使用pyspark数据帧。 pyspark 1.6.1
。
我知道通常行变换需要更多的分区。并将数据保存到磁盘通常需要fewere分区。
但是,对于聚合,我不清楚在pyspark
??
增加分区数量的争论:由于我们不得不为数据进行混洗,因此您希望将较少的数据随机播放,从而增加分区数量,以减少分区的大小。
减少分区数量的参数:IT需要大量开销才能在每个分区上进行收集和计算。因此,太多分区将导致过多的开销,并且pyspark作业可能会超时。
是哪一个?
资料来源:https://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/
答案 0 :(得分:2)
嗯,这取决于,
根据问题使用用户定义的分区可以使某些事情变得更容易,而其他分区则更难一点。但是,这就是我在经历中已经拥有的东西。
当聚合函数随后出现数据丰富时,我使用了这种方法。默认数据分区发生了什么。由于这个原因,我收到了一个OOM错误和其他一些问题。因此,我对数据丰富的聚合使用的内存比我的工作人员可以支持的更多。解决方案是增加该步骤的分区数量并解决了我的问题,但由于随机播放和其他内容,需要更多的执行时间。
这个案子是关于洗牌时间,我有一个Cassandra集群和火花一起,并且使用datasax连接器我试图从Cassandra读取一些带有200个默认分区的数据。但是所有的数据都在同一台机器上,当我做一个简单的聚合时,就会产生大量的混乱。所以我减少了分区,减少了洗牌时间。
您需要了解您的数据以及您想要做的事情。数据处理没有神奇之处。您需要检查您需要做什么以及如何做。它将有助于选择做什么,或增加或减少分区。