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

时间:2018-10-09 07:32:56

标签: apache-spark apache-spark-sql spark-streaming

我试图理解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))

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

1 个答案:

答案 0 :(得分:3)

Spark SQL具有 Catalyst Query Optimizer (Catalyst查询优化器),它负责执行查询。

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

Spark SQL建立了代表我们的查询计划的树,称为logical plan。 Spark可以对逻辑计划进行多种优化,还可以使用cost-based model在同一逻辑计划的多个物理计划之间进行选择。

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

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

此优化称为filter pushdown or predicate pushdown,旨在将过滤条件下推到“裸机”,即数据源引擎。

  

过滤是在非常低的级别执行的,而不是处理   整个数据集

有关更多信息,您可以检查以下链接:

Catalyst Optimizer

Predicate Pushdown