Оба метода приведут к одинаковой производительности, просто из-за того, что их реализация одинакова .
Из реализации Spark на github
def take(n: Int): Array[T] = head(n)
В то время как реализация головы такова:
def head(n: Int): Array[T] = withAction("head", limit(n).queryExecution)(collectFromPlan)
Как вы можете видеть, голова реализована в точности с помощью limit
+ collect
.
Таким образом, ониЧтобы получить одинаковую производительность, разница, которую вы измерили, должна быть случайным отклонением, попробуйте запустить эксперимент много раз, чтобы преодолеть его.