Apache spark 是否存在使用spark中的计数强制进行急切评估的性能问题?
我通常在3种场景中看到整个代码库中的Apache spark 是否存在使用spark中的计数强制进行急切评估的性能问题?,apache-spark,Apache Spark,我通常在3种场景中看到整个代码库中的Dataset.count: 日志log.info(“此ds有${dataset.count}行”) 分支if(dataset.count>0)do x else do y 强制缓存dataset.persist.count 它是否会通过强制查询优化器在这些场景中过早地渴望来阻止查询优化器创建最高效的dag?TL;DR1)和2)通常可以避免,但不应该伤害你(忽略评估成本),3)通常是有害的做法 不带缓存 单独调用count几乎是浪费。虽然日志记录并不总是简单的
Dataset.count
:
log.info(“此ds有${dataset.count}行”)
if(dataset.count>0)do x else do y
dataset.persist.count
缓存
单独调用count
几乎是浪费。虽然日志记录并不总是简单的,但是可以用从监听器()检索到的信息来代替,并且控制流需求通常(并非总是)可以通过更好的管道设计来调节
单独使用它不会对执行计划产生任何影响(count的执行计划通常与父级的执行计划不同。一般情况下,Spark尽可能少做工作,因此它将删除执行计划中不需要计算count的部分)
使用缓存
:
count
withcache
是从RDDAPI使用的模式中天真地复制出来的糟糕做法。对于RDD
,它已经存在争议,但是对于DataFrame
can(选择和谓词下推),从技术上讲,.Count不会改变缓存的工作方式,但缓存会改变Count的工作方式。dataset.persist.Count仍然是触发缓存的好方法,对吗?