Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是";getNumPartitions";昂贵的手术?_Python_Python 2.7_Apache Spark_Pyspark_Spark Dataframe - Fatal编程技术网

Python 是";getNumPartitions";昂贵的手术?

Python 是";getNumPartitions";昂贵的手术?,python,python-2.7,apache-spark,pyspark,spark-dataframe,Python,Python 2.7,Apache Spark,Pyspark,Spark Dataframe,我正在使用pyspark,我调用getNumPartitions()来查看是否需要重新分区,这会大大降低我的代码速度。代码太大,无法在此处发布。我的代码是这样工作的: 我有一个for循环,它通过一系列函数循环,这些函数将应用于DataFrame 很明显,这些都是延迟应用的,所以它们直到for循环结束时才被应用 其中许多函数是withColumn函数,或pivot函数,如下所示: 在每次迭代中,我通过getNumPartitions() 我的印象是,这不是一个昂贵的操作…我是否理解错误,它实际

我正在使用
pyspark
,我调用
getNumPartitions()
来查看是否需要
重新分区
,这会大大降低我的代码速度。代码太大,无法在此处发布。我的代码是这样工作的:

  • 我有一个
    for
    循环,它通过一系列函数循环,这些函数将应用于
    DataFrame
  • 很明显,这些都是延迟应用的,所以它们直到for循环结束时才被应用
  • 其中许多函数是
    withColumn
    函数,或
    pivot
    函数,如下所示:
  • 在每次迭代中,我通过
    getNumPartitions()

我的印象是,这不是一个昂贵的操作…我是否理解错误,它实际上是昂贵的?还是有其他东西在减慢我的代码速度?

查看源代码以查找
getNumPartitions()

def getNumPartitions(self): 
    return self._jrdd.partitions().size() 
它不应该那么贵。我怀疑是其他原因导致了你的减速

以下是我所知道的:

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

您确定是调用
getNumPartitions()
减慢了速度吗?或者您现在正在以不同的方式重新分区?我只调用
getNumPartitions()
。我根本没有重新分配……好吧,没那么贵,至少这不是“解雇”一个有火花的工作。但根据我的经验,这很容易需要10-20秒。这是否取决于RDD/数据帧的大小?也许这就是问题所在……?根据上下文的不同,重新分区可能代价高昂,也可能几乎免费,而上下文正是本文所缺少的。请提供一份报告。