从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 数据帧在写入镶木地板时不会重新分区