通常我Dataset.count在 3 个场景中看到整个代码库:
log.info("this ds has ${dataset.count} rows")if (dataset.count > 0) do x else do ydataset.persist.count它是否会通过强制查询优化器在任何这些场景中过早地急切来阻止查询优化器创建最有效的 dag?
TL;DR 1) 和 2) 通常可以避免但不应该伤害您(忽略评估成本),3) 通常是有害的Cargo 崇拜编程实践。
没有 cache
count单独打电话大多是浪费。虽然并不总是很简单,但日志记录可以用从侦听器检索到的信息替换(这里是 RDD 的示例),并且控制流需求通常(不总是)可以通过更好的管道设计来调节。
单独它不会对执行计划产生任何影响(计数的执行计划,无论如何通常与父级的执行计划不同。通常Spark尽可能少做工作,因此它会删除执行计划的一部分,这不需要计算计数)。
与cache:
count同cache是不好的做法,从RDD API使用的模式复制天真。它已经有争议了RDDs,但是 withDataFrame可以破坏很多内部优化(选择和谓词下推),从技术上讲,甚至不能保证工作。
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |