【问题标题】:Does spark optimize multiple filter applied to an RDD?spark是否优化应用于RDD的多个过滤器?
【发布时间】:2017-02-02 12:54:59
【问题描述】:

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

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

【问题讨论】:

    标签: scala apache-spark rdd


    【解决方案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 从 action 开始,并创建一个 DAG 追踪到源 RDD。因此它将为 2 个不同的路径创建 2 个 DAG,并且 RDD-m 将被评估两次。

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

    【讨论】:

    • 很确定 OP 正在运行 RDD->filter->filter->filter... ->action (注意提到 && 所以我认为这不能回答这个问题而且这个“这会遍历源 RDD,然后应用 map 函数, 创建一个 RDD”有点误导,因为它还没有应用 map 函数,它只在一个动作导致它“折叠” DAG 并实际评估转换时才会这样做。
    • 感谢@TheArchetypalPaul 的回复和澄清问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2015-06-15
    • 2020-12-14
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多