Spark/Catalyst Optimizer
-
[Catalyst Optimizer] SimplifyCasts Rule 알아보기Spark/Catalyst Optimizer 2024. 8. 12. 05:50
- 목차 들어가며.SimplifyCasts Rule 은 이름 그대로 불필요한 Cast 연산을 제거하는 최적화 룰입니다.SimplifyCasts Rule 의 구현 내용은 아래와 같습니다. case Cast(e, dataType, _, _) if e.dataType == dataType같은 타입으로 캐스팅한다면 캐스팅 연산 제거case (ArrayType(from, false), ArrayType(to, true))Null 을 포함하지 않는 Array 를 Null 을 포함하는 Array 로 캐스팅한다면 캐스팅 연산 제거.case (MapType(fromKey, fromValue, false), MapType(toKey, toValue, true))Null 을 포함하지 않는 Map 을 Null 을 포함하는 M..
-
[Catalyst Optimier] ConstantPropagation 알아보기Spark/Catalyst Optimizer 2024. 8. 10. 16:27
- 목차 들어가며.Catalyst Optimizer 의 ConstantPropagation 는 "where a = 1 and b = a" 와 같이 상수가 적용된 Filter Expression 을 최적화합니다. 예를 들어, "where a = 1 and b = a" 와 같은 조건은 ConstantPropagation Rule 의 최적화에 의해서 "where a = 1 and b = 1" 와같이 최적화되며, Constant 인 1이 다른 Filter 로 전파되게 됩니다. ConstantPropagation Rule 은 아래와 같은 구조를 취합니다. Attribute 와 Literal 로 구성된 Filter 를 대상으로 ConstantPropagation 이 적용됩니다. def apply(plan: ..
-
[Catalyst Optimizer] CombineFilters 알아보기Spark/Catalyst Optimizer 2024. 8. 9. 22:42
- 목차 들어가며.CombineFilters 는 Catalyst Optimizer 에서 여러개의 Filter 들을 하나의 Filter 로 묶기 위한 최적화 Rule 입니다. CombineFilters 는 object 로 구현되어 있구요. org.apache.spark.sql.catalyst.optimizer.Optimizer.scala 파일에 정의됩니다. object CombineFilters extends Rule[LogicalPlan] with PredicateHelper { def apply(plan: LogicalPlan): LogicalPlan = plan.transformWithPruning( _.containsPattern(FILTER), ruleId)(applyLocally) v..
-
[Catalyst Optimizer] PruneFilters 알아보기Spark/Catalyst Optimizer 2024. 8. 9. 22:42
- 목차 들어가며.Catalyst Optimizer 는 Rule Based Optimization 을 수행합니다.그 중 한가지 방식인 PruneFilters 는 실행이 무의미한 Filter Expression 들을 제거하는 역할을 합니다.이어지는 글에서 다양한 PruneFilters Rule 의 적용 예시를 살펴보도록 하겠습니다. PruneFilters Object 살펴보기.org.apache.spark.sql.catalyst.optimizer 패키지의 Optimizer.scala 파일 내부에 PruneFilters 클래스가 존재합니다.내용은 아래와 같습니다. filter(true) 와 같은 연산은 제거합니다. 그래서 child 에 해당하는 LocalRelation 이나 Join, Subquery 등이 ..