我试图理解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))
哪种情况会有哪种复杂性。
答案 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
,旨在将过滤条件下推到“裸机”,即数据源引擎。
过滤是在非常低的级别执行的,而不是处理 整个数据集
有关更多信息,您可以检查以下链接: