2017-05-04 71 views
0

我想知道,当执行在缓存是一个过滤RDD犹若我们进行以下说明:上缓存RDD

val rdd : = sc.textFile("myfile").zipwithIndex.cache 
val size = rdd.count 
val filter = rdd.filter(_._2 % 2 == 0) 
val sizeF = filter.count 

在过滤器上执行的操作RDD是执行,如果它是在高速缓存或不是?尽管我们从第一个RDD创建了第二个RDD,但信息来自同一个地方,所以我想知道它是否被复制到需要缓存的新对象中,或者如果过滤对象直接链接到了其父项允许更快的行动?

回答

2

由于filter转型而不是动作,由于火花实际上什么也没有在下面这行:

val filter = rdd.filter(_._2 % 2 == 0) 

以下行:

val sizeF = filter.count 

将使用缓存的()rdd,并将执行filter变换然后count动作

因此,filter转换中没有任何内容cache

Spark Guide

转换

下表列出了一些火花支持 常见的转换。有关详细信息,请参阅RDD API文档(Scala,Java,Python,R)和RDB函数doc(Scala,Java)。

filter(func)返回通过选择func返回true的源的那些元素 形成的新数据集。

注意。如果filter是动作,并且创建了新的RDD,则不会是cached,只有cache()操作在其上执行的RDD是cached

0

没有,

孩子RDD不会cahced,缓存将保持原始RDD在你的工人和其他数据都不会被缓存。

如果您要求这个过滤后的RDD其他步骤不会更改数据,由于Spark将工作中的Spark文件保留在工作人员中,直到发生真正的变化时,响应总是会很快。