Spark SQL 1.4.1 详解
文章平均质量分 85
主要阐述Spark-SQL的基本运行原理
亮亮-AC米兰
这个人什么都没留下
展开
-
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 · 6182 阅读 · 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 · 3366 阅读 · 0 评论 -
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 · 1648 阅读 · 0 评论 -
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 · 3124 阅读 · 0 评论 -
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 · 2495 阅读 · 0 评论 -
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 · 3214 阅读 · 0 评论 -
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 · 1865 阅读 · 0 评论 -
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 · 2482 阅读 · 0 评论