我正在使用pyspark,然后调用getNumPartitions()来查看是否需要repartition,这大大降低了我的代码的速度。代码太大,无法在此处发布。我的代码是这样的:


我有一个for循环,该循环遍历将应用于DataFrame的一堆函数
显然,这些是延迟应用的,因此直到for循环结束才应用它们。
其中许多是withColumn函数或pivot函数,例如:https://databricks.com/blog/2016/02/09/reshaping-data-with-pivot-in-apache-spark.html
在每次迭代中,我按getNumPartitions()打印出分区数


我被认为这不是一个昂贵的手术...我误会了,实际上是昂贵的吗?还是其他原因使我的代码变慢了?

最佳答案

正在查看getNumPartitions()的来源...

def getNumPartitions(self):
    return self._jrdd.partitions().size()


它不应该那么贵。我怀疑还有其他事情正在导致您的速度变慢。

这是我所知道的:


分区列表已缓存,因此只有第一次调用partitions()才会导致计算分区
无论如何,Spark必须为每个RDD计算分区,因此它不应再增加任何时间来查询计数

关于python - “getNumPartitions”是一项昂贵的操作吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43969270/

10-11 03:10