我正在使用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/