是否有任何性能问题迫使在 spark 中使用 count 进行急切评估?
Posted
技术标签:
【中文标题】是否有任何性能问题迫使在 spark 中使用 count 进行急切评估?【英文标题】:Any performance issues forcing eager evaluation using count in spark? 【发布时间】:2018-05-16 20:58:27 【问题描述】:我通常在 3 种情况下在整个代码库中看到 Dataset.count
:
-
记录
log.info("this ds has $dataset.count rows")
分支if (dataset.count > 0) do x else do y
强制缓存dataset.persist.count
它是否会通过强制查询优化器在任何这些场景中过早地急切来阻止查询优化器创建最有效的 dag?
【问题讨论】:
【参考方案1】:TL;DR 1) 和 2) 通常可以避免,但不应伤害您(忽略评估成本),3) 通常是有害的 Cargo cult programming 做法。
没有cache
单独打电话给count
很浪费。虽然并非总是直截了当,但日志记录可以替换为从侦听器 (here is and example for RDDs) 检索到的信息,并且控制流要求通常(并非总是)可以通过更好的管道设计进行调解。
单独它不会对执行计划产生任何影响(count的执行计划,通常与父级的执行计划不同。一般来说Spark做的工作尽可能少,所以它会删除部分执行计划,不需要计算计数)。
cache
:
count
和 cache
是天真地从与 RDD API 一起使用的模式中复制的不好的做法。它已经与RDDs
存在争议,但DataFrame
可以break a lot of internal optimizations(选择和谓词下推),从技术上讲,is not even guaranteed to work。
【讨论】:
Count 不会改变缓存的工作方式,但缓存会改变 count 的工作方式。dataset.persist.count
仍然是触发缓存的好方法吗?以上是关于是否有任何性能问题迫使在 spark 中使用 count 进行急切评估?的主要内容,如果未能解决你的问题,请参考以下文章
IE浏览器是不是有任何动作迫使他们将其从现实世界中完全拆除?