操作顺序为 O(1) 或 O(n) 的火花过滤器

Spark filter which order of operation O(1) or O(n)

我正在尝试理解 spark 的概念,但在某些时候感到困惑,想知道 spark.filter 是 O(n) 还是 O(1) 以及如果我首先对数据进行排序会怎样然后进行过滤,是否会对订单复杂度产生影响。

所以,将尝试更详细地解释:-

Data (1,1,2,3,4,2,3)
Case 1 : Spark.filter(id.equals(3))
Case 2 : Spark.sortBy(id).filter(id.equals(3))

哪种情况会有哪种复杂性。

Spark SQLCatalyst 查询优化器 负责如何执行查询。

Catalyst 是 Spark SQL 查询优化器,用于获取查询计划并将其转换为 Spark 可以 运行 执行的计划.

Spark SQL 构建了一个代表我们查询计划的树,称为 logical plan。 Spark 能够对逻辑计划应用大量优化,还可以使用 cost-based model.

在同一逻辑计划的多个物理计划之间进行选择

对于过滤器,使用 PushDownPredicate,它是 Catalyst Optimizer 的一部分。

当您在加载数据集后立即执行 where or filter 运算符时,Spark SQL 将尝试使用相应的 SQL 将 where/filter 谓词下推到数据源使用 WHERE 子句查询。

此优化称为 filter pushdown or predicate pushdown,旨在将过滤下推到 "bare metal",即数据源引擎。

Filtering is performed at the very low level rather than dealing with the entire dataset

有关更多信息,您可以查看这些链接:

Catalyst Optimizer

Predicate Pushdown