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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Spark limit()函数重新分区数据帧相关的知识,希望对你有一定的参考价值。

我需要使用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
答案

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

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

以上是关于从Spark limit()函数重新分区数据帧的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark 数据帧在写入镶木地板时不会重新分区

如何从 BigQuery 读取分区表到 Spark 数据帧(在 PySpark 中)

spark数据帧的分区数?

Spark中的最佳重新分区方式

为啥 spark 没有在多个节点上重新分配我的数据帧?

Spark 1.6 在数据帧保持分区字段中加载特定分区