Spark 的 `persist` 或 `cache` 的范围

pan*_*anc 5 python scope apache-spark rdd

我对 RDD 在 Spark 中的作用域感到困惑。

根据这个线程

RDD 是否被缓存是 RDD 对象可变状态的一部分。如果你调用 rdd.cache 它将被标记为从那时起缓存。从哪个范围访问它并不重要。

因此,如果我定义了一个在内部创建了新 rdd 的函数,例如(python 代码)

# there is an rdd called "otherRdd" outside the function

def myFun(args):
    ...
    newRdd = otherRdd.map(some_function)
    newRdd.persist()
    ...
Run Code Online (Sandbox Code Playgroud)

请问newRdd全局命名空间中存在吗?或者它只在环境中可见myFun

如果它只在 的环境中可见,那么执行完成myFunmyFun,Spark 会自动unpersist执行newRdd吗?

geo*_*lgo 5

是的,当 RDD 被垃圾回收时,它是非持久化的。所以在 myFun 之外,newRdd 是非持久化的(假设你没有返回它也没有派生的 rdd),你也可以检查这个答案