spark是否优化了应用于RDD的多个滤波器?

时间:2016-09-24 22:26:53

标签: scala apache-spark rdd

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

Spark会多次检查RDD吗?或者它是否同时优化和应用多个过滤器(使用&&&&&&&&&&&&#;>

1 个答案:

答案 0 :(得分:-1)

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

RDD -> map -> filter -> print

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

RDD -> map (lets call it RDD-m) -> filter (lets call filter1) -> print

RDD-m -> filter (lets call filter2) -> print

这些都属于同一份工作。

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

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

要避免的方法是在RDD-m上使用persist方法,这样可以避免重复。