【发布时间】:2017-05-14 22:08:19
【问题描述】:
我正在使用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()的调用减慢了速度吗?还是您现在的重新分区方式不同? -
我只打电话给
getNumPartitions()。我根本没有重新分区... -
AFAIK 没那么贵,至少它没有“点燃”火花。但根据我的经验,这很容易需要 10 到 20 秒。
-
这是否取决于 RDD/DataFrame 的大小?也许这就是问题......?
-
重新分区可能很昂贵或几乎免费,具体取决于上下文,而上下文正是这里所缺少的。请提供minimal reproducible example。
标签: python python-2.7 apache-spark pyspark spark-dataframe