- 博客(104)
- 资源 (1)
- 收藏
- 关注
原创 spark sql 2.3 源码解读 - whole stage codegen (8)
whole stage codegen 是spark 2.0 以后引入的新特性,所以在最后单独把这一块拿出来讲一下。相关背景可以看spark官方的jira:https://issues.apache.org/jira/browse/SPARK-12795awhole stage codegen对性能有很大的提升。如下图所示,将一棵树翻译成了一段代码执...
2018-08-18 01:02:00
1126
1
原创 spark sql 2.3 源码解读 - whole stage codegen (8)
whole stage codegen 是spark 2.0 以后引入的新特性,所以在最后单独把这一块拿出来讲一下。相关背景可以看spark官方的jira:https://issues.apache.org/jira/browse/SPARK-12795awhole stage codegen对性能有很大的提升。如下图所示,将一课树翻译成了一段代码执行,性能肯定会大幅提升。co...
2018-08-18 00:58:59
4070
1
原创 spark sql 2.3 源码解读 - Execute (7)
终于到了最后一步执行了:/** Internal version of the RDD. Avoids copies and has no schema */lazy val toRdd: RDD[InternalRow] = executedPlan.execute()final def execute(): RDD[InternalRow] =...
2018-08-16 23:53:00
451
原创 spark sql 2.3 源码解读 - Planner (5)
Optimizer得到的是最终的 Logical Plan,Planner 将Logical Plan 转化为 Physical Plan。planner执行plan方法:lazy val sparkPlan: SparkPlan = { SparkSession.setActiveSession(sparkSession) // TODO: ...
2018-08-16 23:52:00
302
原创 spark sql 2.3 源码解读 - Preparations (6)
上一章生成的Physical Plan 还需要经过prepareForExecution这一步,做执行前的一些准备工作,代码如下:/ executedPlan should not be used to initialize any SparkPlan. It should be// only used for execution.lazy val ...
2018-08-16 23:52:00
288
原创 spark sql 2.3 源码解读 - Analyzer (3.2)
根据上一节所讲,Analyzer最关键的代码便是rule的实现了。先整体看一下rule的集合:lazy val batches: Seq[Batch] = Seq( Batch("Hints", fixedPoint, new ResolveHints.ResolveBroadcastHints(conf), ResolveHint...
2018-08-16 23:51:00
280
原创 spark sql 2.3 源码解读 - Optimizer (4)
得到 Resolved Logical Plan 后,将进入优化阶段。后续执行逻辑如下:// 如果缓存中有查询结果,则直接替换为缓存的结果,逻辑不复杂,这里不再展开讲了。lazy val withCachedData: LogicalPlan = { assertAnalyzed() assertSupported() sparkSessi...
2018-08-16 23:51:00
182
原创 spark sql 2.3 源码解读 - Analyzer (3.1)
本章将介绍analyzer 结合 catalog 进行绑定,生成 Resolved Logical Plan.上一步得到的 Unresolved Logical Plan将会执行:lazy val analyzed: LogicalPlan = { SparkSession.setActiveSession(sparkSession) spar...
2018-08-16 23:50:00
250
原创 spark sql 2.3 源码解读 - antlr4 && SparkSqlParser (2.3)
接着上一节,继续讲。还是以 SELECT A.B FROM A 为例。屏幕快照 2018-08-12 下午5.00.15 查看AstBuilder逻辑,遍历访问,最终会访问到querySpecification节点:override def visitQuerySpecification( ctx: QueryS...
2018-08-16 23:50:00
355
原创 spark sql 2.3 源码解读 - antlr4 && SparkSqlParser (2.2)
接着上一节,我们看一下antlr4。 antlr可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译...
2018-08-16 23:49:00
317
原创 spark sql 2.3 源码解读 - antlr4 && SparkSqlParser (2.1)
接着上一篇文章,本章将介绍 第1步:sql 语句经过 SqlParser 解析成 Unresolved Logical Plan 当我们执行:val sqlDF = spark.sql("SELECT name FROM people order by name") 看一下sql函数:def sql(sqlText: S...
2018-08-16 23:48:00
424
原创 spark sql 2.3 源码解读 - 架构概览 (1)
spark sql 的前身是shark,类似于 hive, 用户可以基于spark引擎使用sql语句对数据进行分析,而不用去编写程序代码。屏幕快照 2018-08-12 下午2.55.58 上图很好的展示了spark sql的功能,提供了 jdbc,console,编程接口三种方式来操作RDD(Resilient Dist...
2018-08-16 23:48:00
244
原创 spark sql 2.3 源码解读 - Execute (7)
终于到了最后一步执行了:/** Internal version of the RDD. Avoids copies and has no schema */lazy val toRdd: RDD[InternalRow] = executedPlan.execute()final def execute(): RDD[InternalRow] = executeQuery { ...
2018-08-16 00:41:38
1035
原创 spark sql 2.3 源码解读 - Preparations (6)
上一章生成的Physical Plan 还需要经过prepareForExecution这一步,做执行前的一些准备工作,代码如下:/ executedPlan should not be used to initialize any SparkPlan. It should be// only used for execution.lazy val executedPlan: SparkP...
2018-08-16 00:40:50
634
原创 spark sql 2.3 源码解读 - Planner (5)
Optimizer得到的是最终的 Logical Plan,Planner 将Logical Plan 转化为 Physical Plan。planner执行plan方法:lazy val sparkPlan: SparkPlan = { SparkSession.setActiveSession(sparkSession) // TODO: We use next(), i.e....
2018-08-13 23:29:11
552
原创 spark sql 2.3 源码解读 - Optimizer (4)
得到 Resolved Logical Plan 后,将进入优化阶段。后续执行逻辑如下:// 如果缓存中有查询结果,则直接替换为缓存的结果,逻辑不复杂,这里不再展开讲了。lazy val withCachedData: LogicalPlan = { assertAnalyzed() assertSupported() sparkSession.sharedState.cache...
2018-08-13 18:28:34
731
原创 spark sql 2.3 源码解读 - Analyzer (3.2)
根据上一节所讲,Analyzer最关键的代码便是rule的实现了。先整体看一下rule的集合:lazy val batches: Seq[Batch] = Seq( Batch("Hints", fixedPoint, new ResolveHints.ResolveBroadcastHints(conf), ResolveHints.RemoveAllHints),...
2018-08-13 11:16:16
853
原创 spark sql 2.3 源码解读 - Analyzer (3.1)
本章将介绍analyzer 结合 catalog 进行绑定,生成 Resolved Logical Plan.上一步得到的 Unresolved Logical Plan将会执行:lazy val analyzed: LogicalPlan = { print("before analyzed:" + logical.treeString) SparkSession.setActi...
2018-08-13 10:04:32
577
原创 spark sql 2.3 源码解读 - antlr4 && SparkSqlParser (2.3)
接着上一节,继续讲。还是以 SELECT A.B FROM A 为例。 查看AstBuilder逻辑,遍历访问,最终会访问到querySpecification节点:override def visitQuerySpecification( ctx: QuerySpecificationContext): LogicalPlan = withOrigin(ct...
2018-08-12 21:37:50
1013
原创 spark sql 2.3 源码解读 - antlr4 && SparkSqlParser (2.2)
接着上一节,我们看一下antlr4。 antlr可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(transl...
2018-08-12 17:28:44
1743
1
原创 spark sql 2.3 源码解读 - antlr4 && SparkSqlParser (2.1)
接着上一篇文章,本章将介绍 第1步:sql 语句经过 SqlParser 解析成 Unresolved Logical Plan 当我们执行:val sqlDF = spark.sql("SELECT name FROM people order by name") 看一下sql函数:def sql(sqlText: String): DataFrame = {...
2018-08-12 16:30:01
886
原创 spark sql 2.3 源码解读 - 架构概览 (1)
spark sql 的前身是shark,类似于 hive, 用户可以基于spark引擎使用sql语句对数据进行分析,而不用去编写程序代码。 上图很好的展示了spark sql的功能,提供了 jdbc,console,编程接口三种方式来操作RDD(Resilient Distributed Datasets),用户只需要编写sql即可,不需要编写程序代码。 spark s...
2018-08-12 15:27:43
2422
1
原创 spark应用调试(idea 环境)
spark应用调试(idea 环境)spark shell可以比较方便的分步执行调试spark应用程序,但有时候不是很方便。下面介绍一种直接在idea中调试spark程序的方法。maven 新建工程 这个不多赘述,注意一点是pom文件中把依赖的spark的scope的provided去掉,因为我们要在idea中直接运行,不会用spark-...
2018-07-15 18:01:00
260
原创 spark 应用调试(idea 环境)
spark应用调试(idea 环境)spark shell可以比较方便的分步执行调试spark应用程序,但有时候不是很方便。下面介绍一种直接在idea中调试spark程序的方法。maven 新建工程 这个不多赘述,注意一点是pom文件中把依赖的spark的scope的provided去掉,因为我们要在idea中直接运行,不会用spark-submit。<d...
2018-07-15 18:00:01
1521
原创 spark源码开发调试(idea环境)
源码项目调试 在源代码项目对源码修改后用idea直接进行调试工作clone源码到本地并编译 git clone git@github.com:apache/spark.git ./build/mvn -DskipTests clean packageidea导入工程 Fi...
2018-07-15 16:15:16
1456
原创 spark源码开发调试(idea环境)
源码项目调试 在源代码项目对源码修改后用idea直接进行调试工作clone源码到本地并编译 git clone git@github.com:apache/spark.git ./build/mvn -DskipTests clean packageidea导入工程 ...
2018-07-15 13:28:00
335
原创 spark 源码编译发布
源码将项目源码clone源码到本地项目地址:https://github.com/apache/sparkgit clone git@github.com:apache/spark.git编译spark项目同时支持maven和sbt两种方式,以maven为例:最简单的编译:./build/mvn -DskipTests clean pack...
2018-07-15 11:04:00
123
原创 spark源码编译发布
源码将项目源码clone源码到本地项目地址:https://github.com/apache/sparkgit clone git@github.com:apache/spark.git编译spark项目同时支持maven和sbt两种方式,以maven为例:最简单的编译:./build/mvn -DskipTests clean package使用 -...
2018-07-15 10:57:09
594
原创 95. Unique Binary Search Trees II
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.For example,Given n = 3, your program should return all 5 unique BST's shown below. 1
2017-08-26 18:56:29
233
原创 96. Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?For example,Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \
2017-08-26 17:38:34
244
原创 100. Same Tree
Given two binary trees, write a function to check if they are equal or not.Two binary trees are considered equal if they are structurally identical and the nodes have the same value.# Defi
2017-08-26 17:15:50
256
原创 97. Interleaving String
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.For example,Given:s1 = "aabcc",s2 = "dbbca",When s3 = "aadbbcbcac", return true.When s3 = "aadbbbaccc", retur
2017-08-26 17:01:01
242
原创 98. Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the node's key.Th
2017-08-26 15:36:53
249
转载 gcc 常用命令
1简介2简单编译2.1预处理2.2编译为汇编代码(Compilation)2.3汇编(Assembly)2.4连接(Linking)3多个程序文件的编译4检错5库文件连接5.1编译成可执行文件5.2链接5.3强制链接时使用静态链接库1简介GCC 的意思也只是 GNU C Compiler 而已。
2017-02-17 17:30:23
364
转载 gcc -I 和-L参数
-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了 好了现在我们知道怎么得到库名,当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-lte
2017-02-16 21:21:56
741
转载 静态库和动态库编译
我们通常把一些公用函数制作成函数库,供其它程序使用。 函数库分为静态库和动态库两种。 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。 本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。
2017-02-16 14:37:52
880
转载 makefile学习
[-]Makefile 介绍1 Makefile的规则2 一个示例3 make是如何工作的4 makefile中使用变量5 让make自动推导6 另类风格的makefile7 清空目标文件的规则Makefile 总述1 Makefile里有什么2Makefile的文件名3 引用其它的Makefile4 环境变量 MAKEFILES5 make的工作方式Makefil
2017-02-16 11:20:23
521
转载 解决hash冲突
开放地址法:1.线性探测法 线性再散列法是形式最简单的处理冲突的方法。插入元素时,如果发生冲突,算法会简单的从该槽位置向后循环遍历hash表,直到找到表中的下一个空槽,并将该元素放入该槽中(会导致相同hash值的元素挨在一起和其他hash值对应的槽被占用)。查找元素时,首先散列值所指向的槽,如果没有找到匹配,则继续从该槽遍历hash表,直到:(1)找到相应的元素
2017-02-16 10:44:45
792
转载 MySQL索引背后的数据结构及算法原理
MySQL索引背后的数据结构及算法原理 写在前面的话在编程领域有一句人尽皆知的法则“程序 = 数据结构 + 算法”,我个人是不太赞同这句话(因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和工作中我确认深深感受到数据结构和算法的重要性,很多东西,如果你愿意稍稍往深处挖一点,那么扑面而来
2016-06-28 17:31:19
1046
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人