Apache spark 缓存中间结果Spark

Apache spark 缓存中间结果Spark,apache-spark,Apache Spark,我正在以RDD的形式从数据库中读取大量记录,并执行不同的操作。我知道Spark会在转换后自动释放中间RDD数据。它会再看一遍 从源代码来看,如果我们将中间RDD称为程序的后一部分。这是否意味着它将再次从数据库中读取数据?是否有工具建议我们应该缓存哪个中间结果以获得更好的结果?Spark会被延迟评估,转换(及其输出)在DAG中遇到操作之前不会实现。即使是persist/cache也不是操作,它们也很懒惰 如果到目前为止DAG中有一个操作(您希望访问中间RDD的点),加上中间RDD前面有一个持久化/

我正在以RDD的形式从数据库中读取大量记录,并执行不同的操作。我知道Spark会在转换后自动释放中间RDD数据。它会再看一遍
从源代码来看,如果我们将中间RDD称为程序的后一部分。这是否意味着它将再次从数据库中读取数据?是否有工具建议我们应该缓存哪个中间结果以获得更好的结果?

Spark会被延迟评估,
转换(及其输出)
DAG
中遇到操作之前不会实现。即使是
persist/cache
也不是
操作,它们也很懒惰


如果到目前为止DAG中有一个
操作
(您希望访问中间RDD的点),加上中间RDD前面有一个
持久化/缓存
,spark将仅从该操作/缓存点重新计算。否则它将从数据库中再次读取。如果您没有任何操作,并且绝对希望阻止再次读取数据库,则可以使用
saveAsTextFile()
并再次读取。

谢谢……这帮助我重新访问代码库以提高性能。一个问题是,如果我通过从另一个RDD中选择几行来生成中间RDD,我仍然应该缓存它吗?或者仅当我从DB/文件/或任何外部源读取数据时才需要它?您将再次使用哪个RDD:是您的过滤RDD还是您已过滤的RDD?我将使用新创建的RDD(过滤RDD)。如果
P
是父RDD,则执行转换:
T1
)将列添加到P
T2
)在P
T3
上分解)将列添加到P
T4
)将列添加到T2的结果<代码>T5
)在T2结果时爆炸。这里请注意,您使用了
P
3次&转换的结果
T2
2次,
T2
来自
P
。显然,您需要坚持
P
。现在,您是否应该保持
T2
?,这取决于多个因素:1)如果您可以同时在内存中保持P和T2,那么也要保持
T2
。2) 如果您没有足够的内存,或者
T4
T5
不是那么耗时,请不要将其保留。请记住,
T2
火花将从
P
开始,而不是从开始。