package org.apache.spark.sql.execution import org.apache.spark.sql.SparkSession import org.apache.spark.sql.catalyst.optimizer.StarryLocalRelationReplace /** * Created by passionke on 2018/6/27. * 紫微无姓,红尘留行,扁舟越沧溟,何须山高龙自灵。 * 一朝鹏程,快意风云,挥手功名 */ object LocalBasedStrategies { def register(sparkSession: SparkSession): Unit = { sparkSession.experimental.extraStrategies = Seq( StarryAggStrategy(), StarryJoinLocalStrategy(sparkSession.sessionState.conf), StarryUnionLocalStrategy(), StarryLimitLocalStrategy(), StarryLocalTableScanStrategies() ) ++: sparkSession.experimental.extraStrategies sparkSession.experimental.extraOptimizations = Seq( StarryLocalRelationReplace ) } def unRegister(sparkSession: SparkSession): Unit = { sparkSession.experimental.extraStrategies = sparkSession.experimental.extraStrategies .filter(strategy => !strategy.isInstanceOf[StarryJoinLocalStrategy]) .filter(strategy => !strategy.isInstanceOf[StarryUnionLocalStrategy]) .filter(strategy => !strategy.isInstanceOf[StarryLimitLocalStrategy]) .filter(strategy => !strategy.isInstanceOf[StarryAggStrategy]) .filter(strategy => !strategy.isInstanceOf[StarryLocalTableScanStrategies]) sparkSession.experimental.extraOptimizations = Seq() } }