从Spark limit()函数重新分区数据帧

问题描述 投票:2回答:1

我需要使用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
apache-spark time pyspark
1个回答
1
投票

打电话给cache()然后count()工作。

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

© www.soinside.com 2019 - 2024. All rights reserved.