我正在使用 pyspark
,我调用 getNumPartitions()
来查看是否需要重新分区
,这大大降低了我的代码速度.代码太大,无法在此处发布。我的代码是这样工作的:
- 我有一个
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/