我需要使用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
答案 0 :(得分:1)
致电cache()
然后count()
工作。
我认为Spark的懒惰评估并不是出于某些原因而执行重新分区,但我不确定为什么count
应该是一个动作。