我正在运行一个简单的Spark应用程序,其中我在RDD上应用多个过滤器并最终应用操作。
Spark会多次检查RDD吗?或者它是否同时优化和应用多个过滤器(使用&&&&&&&&&&&&#;>
答案 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
方法,这样可以避免重复。