shi*_*455 10 apache-spark apache-spark-sql
我想了解以下代码存储在哪个节点(驱动程序或工作程序/执行程序)中
df.cache() //df is a large dataframe (200GB)
Run Code Online (Sandbox Code Playgroud)
并且具有更好的性能:使用 sqlcachetable或cache(). 我的理解是,其中一个是懒惰的,另一个是渴望的。
df.cache()调用persist()在存储级别存储为 的方法MEMORY_AND_DISK,但您可以更改存储级别
该persist()方法调用 sparkSession.sharedState.cacheManager.cacheQuery() 并且当您看到cacheTable它的代码时也会调用相同的 sparkSession.sharedState.cacheManager.cacheQuery()
这意味着两者是相同的并且被延迟评估(仅在执行操作时评估),除了persist方法可以存储为提供的存储级别,这些是可用的存储级别
也可以使用CACHE TABLE不惰性求值的 SQL将整个表存储在内存中,这也可能导致OOM
总结: cache() , persist(),cacheTable()被懒惰地评估,需要执行一个动作才能在SQL CACHE TABLE渴望的地方工作
看到这里的细节!
可以根据自己的需求选择!
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
24843 次 |
| 最近记录: |