首页 > 解决方案 > 与 take(10) 与 limit(10).collect() 的性能比较

问题描述

我有一个包含十亿条记录的数据框,我想从中取出 10 条记录。

哪种方法更好更快?

df.take(10)还是df.limit(10).collect()

标签: scaladataframeapache-sparkapache-spark-sql

解决方案


这两种方法将产生相同的性能,这仅仅是因为它们的实现是相同的

来自github上的 Spark 实现

def take(n: Int): Array[T] = head(n)

而 head 的实现是:

def head(n: Int): Array[T] = withAction("head", limit(n).queryExecution)(collectFromPlan)

如您所见, head 完全是使用limit+实现的collect

因此它们导致相同的性能,您测量的差异必须是随机变化,尝试多次运行实验以克服它。


推荐阅读