scala - 与 take(10) 与 limit(10).collect() 的性能比较
问题描述
我有一个包含十亿条记录的数据框,我想从中取出 10 条记录。
哪种方法更好更快?
df.take(10)
还是df.limit(10).collect()
?
解决方案
这两种方法将产生相同的性能,这仅仅是因为它们的实现是相同的。
来自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
。
因此它们导致相同的性能,您测量的差异必须是随机变化,尝试多次运行实验以克服它。
推荐阅读
- android - 有没有办法为 Android Studio 中的一个活动记录 RoboScript?
- list - PyTorch DataLoader 返回列表而不是自定义数据集上的张量
- javascript - 在 html 正文中显示文本文件内容:如何在我可以在 HTML'body 上显示的变量中获取 XMLHttpRequest 的结果?
- ubuntu - 具有 FB 先知功能的多处理池,无法在 Gunicorn 上运行
- javascript - 如何使用 Material UI React 中的 Menu 和 MenuItem 在单击时获取 MenuItem 的名称
- firebase - 在 null 上调用了 getter 'postersImageUrl'。接收方:null 尝试调用:postersImageUrl
- terraform - Terraform AWS Elasticache 全局复制组辅助集群设置自动故障转移为 True
- python - Keras save_model() 和 load_model() 方法无法按预期工作
- c - 从文件读取后输出不打印到标准输出,在 C 中使用 printf ("%s", );
- javascript - 你如何在animejs中为translateZ设置动画?