- 博客(8)
- 资源 (8)
- 收藏
- 关注
原创 Spark-Sql源码解析之八 Codegen
Codegen,动态字节码技术,那么什么是动态字节码技术呢?先看来一段代码,假设SparkPlan为Sortcase class Sort( sortOrder: Seq[SortOrder], global: Boolean, child: SparkPlan) extends UnaryNode { override def requiredChildDis
2016-08-12 13:06:58 6166 1
原创 Spark-Sql源码解析之七 Execute: executed Plan -> RDD[Row]
SparkPlan如何执行呢,SparkPlan是如何转变为RDD[Row]的呢?首先看一段代码:SQLContext sqlContext = new SQLContext(jsc);DataFrame dataFrame = sqlContext.parquetFile(parquetPath);dataFrame.registerTempTable(source);String s
2016-08-12 13:03:25 3346
原创 Spark-Sql源码解析之六 PrepareForExecution: spark plan -> executed Plan
在SparkPlan中插入Shuffle的操作,如果前后2个SparkPlan的outputPartitioning不一样的话,则中间需要插入Shuffle的动作,比分说聚合函数,先局部聚合,然后全局聚合,局部聚合和全局聚合的分区规则是不一样的,中间需要进行一次Shuffle。比方说sql语句:selectSUM(id) from test group by dev_chnid其从逻辑计划
2016-08-12 12:57:38 1636
原创 Spark-Sql源码解析之五 Spark Planner:optimized logical plan –> spark plan
前面描述的主要是逻辑计划,即sql如何被解析成logicalplan,以及logicalplan如何被analyzer以及optimzer,接下来主要介绍逻辑计划如何被翻译成物理计划,即SparkPlan。lazy val sparkPlan: SparkPlan = { SparkPlan.currentContext.set(self) planner.plan(optimized
2016-08-12 10:56:52 3113
原创 Spark-Sql源码解析之四 Optimizer: analyzed logical plan –> optimized logical plan
Optimizer的主要职责是将Analyzer给Resolved的Logical Plan根据不同的优化策略Batch,来对语法树进行优化,优化逻辑计划节点(Logical Plan)以及表达式(Expression),也是转换成物理执行计划的前置。它的工作原理和analyzer一致,也是通过其下的batch里面的Rule[LogicalPlan]来进行处理的。object DefaultO
2016-08-12 10:49:28 2483
原创 Spark-Sql源码解析之三 Analyzer:Unresolved logical plan –> analyzed logical plan
Analyzer主要职责就是将通过Sql Parser未能Resolved的Logical Plan给Resolved掉。lazy val analyzed: LogicalPlan = analyzer.execute(logical)//分析过的LogicalPlanprotected[sql] lazy val analyzer: Analyzer = new Analyzer(c
2016-08-11 16:51:33 3193
原创 Spark-Sql源码解析之二 Sqlparser:sql –> unresolved logical plan
前面章节讲解了Spark-SQL中的核心流程,接下来主要讲解如何将sql语句转化为UnResolved Logical Plan(包含UnresolvedRelation、 UnresolvedFunction、 UnresolvedAttribute)。protected[sql] def parseSql(sql: String): LogicalPlan = { val ret =
2016-08-11 16:18:03 1849
原创 Spark-Sql源码解析之一 引言
1.1 Demo以一个Spark-Sql的例子开始:public class TestSparkSql { public static void main(String[] args) { Logger log = Logger.getLogger(TestSparkSql.class); System.setProperty
2016-08-11 13:38:48 2472
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人