从Spark limit()函数

时间:2018-03-07 02:42:44

标签: apache-spark time pyspark

我需要使用limit函数从数据帧中获取n个条目/行。我知道这是不可取的,但这是一个预处理步骤,在实际实现代码时不需要。但是,我在其他地方读过,使用limit函数生成的数据帧只有1个分区。

我想测量我的工作的处理时间,不应受此限制。我实际上尝试过重新分区,但性能提升很小(如果有的话)。我通过打印df.rdd.getNumPartitions()检查了分区,但它仍然是1。是否有某种程度上迫使重新分配发生?

编辑:请注意,getNumPartitions()是在count行动后运行的。

EDIT2:示例代码

df = random_data.groupBy("col").count().sort(F.desc("count")).limit(100).repartition(10)
df.count()
print("No. of partitions: {0}".format(df.rdd.getNumPartitions())) # Prints 1

1 个答案:

答案 0 :(得分:1)

致电cache()然后count()工作。

我认为Spark的懒惰评估并不是出于某些原因而执行重新分区,但我不确定为什么count应该是一个动作。