【问题标题】:Is "getNumPartitions" an expensive operation?“getNumPartitions”是一项昂贵的操作吗?
【发布时间】:2017-05-14 22:08:19
【问题描述】:

我正在使用pyspark,我打电话给getNumPartitions() 看看我是否需要repartition,这大大减慢了我的代码速度。代码太大,无法在此处发布。我的代码是这样工作的:

我的印象是这不是一项昂贵的手术……我是不是理解错了,它真的很贵吗?或者是其他什么东西减慢了我的代码?

【问题讨论】:

  • 您确定是对getNumPartitions() 的调用减慢了速度吗?还是您现在的重新分区方式不同?
  • 我只打电话给getNumPartitions()。我根本没有重新分区...
  • AFAIK 没那么贵,至少它没有“点燃”火花。但根据我的经验,这很容易需要 10 到 20 秒。
  • 这是否取决于 RDD/DataFrame 的大小?也许这就是问题......?
  • 重新分区可能很昂贵或几乎免费,具体取决于上下文,而上下文正是这里所缺少的。请提供minimal reproducible example

标签: python python-2.7 apache-spark pyspark spark-dataframe


【解决方案1】:

查看getNumPartitions()的来源...

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

它不应该那么贵。我怀疑还有其他原因导致您的速度变慢。

以下是我所知道的:

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

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2021-10-06
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多