Scala spark是否优化应用于RDD的多重过滤器?

Scala spark是否优化应用于RDD的多重过滤器?,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我正在运行一个简单的Spark应用程序,其中我在RDD上应用了多个过滤器,并最终应用了一个操作 Spark是否多次检查RDD?还是同时优化和应用多个过滤器(使用&&O操作)?RDD上的每个转换都会创建一个新的RDD。让我用两个简单的例子来解释: RDD->map->filter->print 这将遍历源RDD,然后应用map函数,创建一个RDD,然后应用过滤器,创建另一个RDD,最后执行print操作 RDD->map(我们称之为RDD-m)->filter(我们称之为filter1)->pri

我正在运行一个简单的Spark应用程序,其中我在RDD上应用了多个过滤器,并最终应用了一个操作


Spark是否多次检查RDD?还是同时优化和应用多个过滤器(使用&&O操作)?

RDD上的每个转换都会创建一个新的RDD。让我用两个简单的例子来解释:

RDD->map->filter->print

这将遍历源RDD,然后应用map函数,创建一个RDD,然后应用过滤器,创建另一个RDD,最后执行
print
操作

RDD->map(我们称之为RDD-m)->filter(我们称之为filter1)->print

RDD-m->filter(让我们调用filter2)->打印

这两者都是同一工作的一部分

在这里,我们在第一个map函数之后创建一个新的RDD(称为RDD-m)。现在我们正在扩展,在同一RDD-m上应用两个过滤器函数(filter1和filter2)。然后我们最终打印出2个结果RDD。所以在这里,RDD-m可能会在两个过滤器函数中被重用,但事实并非如此

Spark从动作开始,创建一个DAG跟踪到源RDD。因此,它将为2条不同的路径创建2个DAG,并且RDD-m将被评估两次


避免的方法是在RDD-m上使用
persist
方法,这将避免重复。

非常确定OP正在进行
RDD->filter->filter->filter…->动作
(注意提到的&&,所以我认为这并不能回答这个问题,而这个“先检查源RDD,然后应用映射函数,创建RDD”,这有点误导,因为它还没有应用映射函数,只有当一个动作导致它“崩溃”时才会这样做DAG并实际评估转换。感谢@TheArchetypalPaul的回答和澄清问题。