Spark SQL中的Catalyst 的工作机制
答:不管是SQL、Hive SQL还是DataFrame、Dataset触发Action Job的时候,都会经过解析变成unresolved的逻辑执行计划,然后利用元数据信息对unresolved的逻辑执行计算进行分析,得到逻辑执行计划,然后对逻辑执行计划进行优化,得到优化后的逻辑执行计划,然后利用优化后的逻辑执行计划生成多个物理执行计划,利用cost model分别对所有的物理执行计划进行测试看看哪个性能更好,然后选出性能最好的物理执行计划,根据选择好的物理执行计划进行代码生成,最终生成RDD链,开始执行并返回结果

RDD是:不变的、分布式的数据集、在集群中是分区的、懒计算的以及是类型安全的
RDD是Spark的基础,Dataset和DataFrame最终还是会调用RDD的API来实现
DataFrame就是Row类型的Dataset,和RDD一样是不变的、分布式的数据集、在集群中是分区的、懒计算的,但不是类型安全的,没有提供类似于RDD中的函数式编程的接口,但是DataFrame的性能比RDD强很多
Dataset就是强类型、支持函数式变成的DataFrame,说白了Dataset就是RDD + DataFrame
 
这个是因为Spark团队利用DataFrame或者Dataset中的Schema信息对DataFrame或者Dataset中的API做了很大的性能优化,如下:
1、在缓存DataFrame或者Dataset的时候,可以对基本类型的列按列进行存储
2、钨丝计划:第一、引入了一个显示的内存管理器让Spark操作可以直接针对二进制数据而不是Java对象,这样就可以减少Java对象的开销和无效率的GC;第二、设计了更加缓存友好的算法和数据结构,从而让Spark应用程序可以花费更少的时间等待CPU从内存中读取数据,也给有用的工作提供了更多的计算时间;第三、Code generation去掉了原始数据类型的封装和解封,更重要的是避免了昂贵的多态函数调度
3、Catalyst Optimizer,因为Spark的RDD是懒加载的,所在在触发Job之前可以对RDD的链做很多的优化,而Catalyst Optimizer就是给这个RDD链方便的加上优化的手段
 
 

Spark SQL中的Catalyst 的工作机制的更多相关文章

  1. Spark SQL中UDF和UDAF

    转载自:https://blog.csdn.net/u012297062/article/details/52227909 UDF: User Defined Function,用户自定义的函数,函数 ...

  2. Spark SQL中Not in Subquery为何低效以及如何规避

    首先看个Not in Subquery的SQL: // test_partition1 和 test_partition2为Hive外部分区表 select * from test_partition ...

  3. Spark SQL中列转行(UNPIVOT)的两种方法

    行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...

  4. spark sql中进行sechema合并

    spark sql中支持sechema合并的操作. 直接上官方的代码吧. val sqlContext = new org.apache.spark.sql.SQLContext(sc) // sql ...

  5. [翻译] Python 3.5中async/await的工作机制

    Python 3.5中async/await的工作机制 多处翻译出于自己理解,如有疑惑请参考原文 原文链接 身为Python核心开发组的成员,我对于这门语言的各种细节充满好奇.尽管我很清楚自己不可能对 ...

  6. Spark SQL中出现 CROSS JOIN 问题解决

    Spark SQL中出现 CROSS JOIN 问题解决 1.问题显示如下所示:     Use the CROSS JOIN syntax to allow cartesian products b ...

  7. Spark sql -- Spark sql中的窗口函数和对应的api

    一.窗口函数种类 ranking 排名类 analytic 分析类 aggregate 聚合类 Function Type SQL DataFrame API Description  Ranking ...

  8. 【原创】大叔经验分享(84)spark sql中设置hive.exec.max.dynamic.partitions无效

    spark 2.4 spark sql中执行 set hive.exec.max.dynamic.partitions=10000; 后再执行sql依然会报错: org.apache.hadoop.h ...

  9. Spark SQL中 RDD 转换到 DataFrame

    1.people.txtsoyo8, 35小周, 30小华, 19soyo,882./** * Created by soyo on 17-10-10. * 利用反射机制推断RDD模式 */impor ...

随机推荐

  1. 用idea如何把一个写好的项目传到GitHub上

    原文地址:https://blog.csdn.net/u010775025/article/details/79219491 一.登录到自己的GitHub上,创建一个新的仓库如下图springboot ...

  2. 逻辑运算符/三元运算符/Scanner

    逻辑运算符 &(并且) , |(或者) , !(非) , ^(异或) , &&(短路与) , ||(短路或) 注意事项: a:逻辑运算符一般用于连接boolean类型的表达式或 ...

  3. kafka参数解析+启动参数解析

    Kafka参数详解 每个kafka broker中配置文件server.properties默认必须配置的属性如下: broker.id=0 num.network.threads=2 num.io. ...

  4. windowsServer-------- 系统中调出文件扩展名

    Windows Server是微软发布的一系列服务器操作系统的品牌名. 各个品牌的发布日期 Windows Server 2003 (2003年4月) Windows Server 2003 R2(2 ...

  5. Adobe Audition cc 修改音频 --- 淡出、淡入,合并、裁剪

    ​1.导入音频到Adobe Audition cc中支持多个音频操作 也可以使用鼠标把音频放入其中 2.淡出淡入: 红色圈中的就是淡出淡入的控制符 左手按住ctrl 或者 shift 键  右手按住鼠 ...

  6. npm install 报错 error Unexpected end of JSON input while parsing near '...sShrinkwrap":false,"d' 解决办法

    npm install 报错 : error Unexpected end of JSON input while parsing near '...sShrinkwrap":false,& ...

  7. .NET Core如何使用NLog

    1.新建ASP.NET Core项目 1.1选择项目 1.2选择.Net版本 2. 添加NLog插件 2.1 通过Nuget安装 2.2下载相关的插件 3.修改NLog配置文件 3.1添加NLog配置 ...

  8. LOJ2874 JOISC2014 历史研究 分块、莫队

    传送门 看到出现次数自然地考虑莫队. 但是发现如果需要删除并动态维护答案的话,则要用一个堆来维护答案,增加了一个\(log\).但是加入操作却没有这个\(log\),所以我们考虑避免删除操作. 分块, ...

  9. 【题解】有限制的排列 [51nod1296]

    [题解]有限制的排列 [51nod1296] 传送门:有限制的排列 \([51nod1296]\) [题目描述] 给出 \(n,m_1,m_2\) 和 \(\{a[1],a[2]...a[m_1]\} ...

  10. SQL分类之DML:增删改表中的数据

    DML:增删改表中的数据 1.添加数据: 语法: insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n): 注意: 1.列名和值要一一对应. 2.如果表名 ...