rdd是保存在内存中还是在操作完成后立即从内存中清除?

kq0g1dla  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(696)

我正在翻阅一本书,这本书对我来说是一个矛盾的陈述。引用这本书:“spark的rdd在默认情况下,每次对其运行操作时都会重新计算。”但在接下来的几行中,它指出:“在第一次计算之后,spark会将rdd内容存储在内存中,并在将来的操作中重用。”
我的问题是,如果RDD存储在内存中,为什么每次对它们调用操作时都要重新计算它?
在第一条语句中,它表示每次都重新计算rdd,在第二条语句中,它表示rdd存储在内存中,以便在将来的操作中重用它们。

wyyhbhjk

wyyhbhjk1#

"Spark’s RDDs are by default recomputed each time you run an action on them." 对于this语句,每次对其运行操作时都会重新计算yes rdd。现在它背后的原因是,如果它将所有rdds内容存储在内存中,那么您的内存很快就会耗尽。因此,它不能将每个RDD都保存在内存中。当您对它执行任何操作时,它会读取源数据并对其执行转换,并为您的操作提供输出。 "After computing it the first time, Spark will store the RDD contents in memory and reuse them in future actions." 默认情况下,它不会将其存储在内存中,但是根据您的用例,您可以使用 df.cache() 或者 df.persist() 然后它会将rdd内容存储在内存中,当您第二次执行rdd的任何操作时,依赖于缓存的rdd,它不会从源代码中读取,而是从内存中使用它。如果要对rdd执行多个操作,或者存在复杂的转换逻辑,您不希望每次调用操作时spark都执行这些逻辑,那么只应该缓存rdd。

相关问题