我以RDD的形式从数据库中读取一堆记录并执行不同的操作。据我所知,Spark会在转换后自动释放中间RDD数据。它会再读一遍 从源头来看,如果我们将该中间RDD引用到程序的后半部分。这是否意味着它将再次从数据库中读取数据?无论如何,工具建议我们应该缓存哪个中间结果以获得更好的结果?
答案 0 :(得分:2)
Spark会被懒惰地评估,transformations
(及其输出)将不会实现,直到DAG
中遇到操作为止。即使persist/cache
不是action
,也是懒惰的。
如果您的DAG中有action
到目前为止(您想要访问中间RDD的点),加上您在中间RDD之前有persist/cache
,那么spark将仅从该动作重新计算/缓存点。否则它将再次从数据库中读取。如果您没有任何操作并且绝对想要再次阻止读取数据库,则可以使用saveAsTextFile()
并再次阅读。