14 | 台前幕后:DataFrame与Spark SQL的由来
RDD 之殇:优化空间受限
- 深入了解
- 翻译
- 解释
- 总结
Spark SQL与DataFrame技术特点深度剖析 DataFrame作为Spark SQL子框架下的一种数据表示形式,相较于RDD,携带数据模式,提供明确的类型信息,从而提升数据存储与访问效率。尽管DataFrame的算子表达能力较弱,但每个算子的计算逻辑都是确定的,为Spark引擎的内核优化打开了全新的空间。文章着重介绍了Spark SQL作为幕后英雄,负责优化引擎内核的关键角色。通过Catalyst优化器和Tungsten两个核心组件,Spark SQL实现了对DataFrame的优化。Catalyst优化器负责创建并优化执行计划,而Tungsten则用于优化数据结果与可执行代码。通过对这些核心组件的介绍,读者可以更好地理解Spark SQL的优化过程。整体而言,本文通过对DataFrame与Spark SQL的技术特点进行深入剖析,为读者提供了对这一技术领域的全面了解。
《零基础入门 Spark》,新⼈⾸单¥59
全部留言(5)
- 最新
- 精选
- 大叮当老师您好,请教您两个问题: 1、除了dataframe,还有个dataset,那dataframe和dataset两种格式,在执行的时候有没有效率、性能这方面差异呢?您更推荐哪种呢 2、Dataset<Row>和Dataset<具体类型>比如Dataset<Person>,这两种是不是性能上也有差异呢? 谢谢
作者回复: 好问题~ Dataset咱们一直没讲,先说结论。在执行效率上,Dataset与DataFrame是一样的、一致的,没有区别。他们都能共享Spark SQL提供的性能红利,所以说,从性能的角度,不用担心。包括你提到的Dataset<Row>和Dataset<具体类型>之间,性能上也没有差异。 差异主要在开发效率上,对于Dataset<具体类型>,开发者需要定义明确的case class,从而让Spark SQL知道每个字段的具体类型。这其实就涉及到一个开发效率的问题,为什么这么说呢? 当应用中的数据集较多的时候,或者说当你需要创建多个Dataset的时候,你都需要定义相应的case class。其实,定义case class还是或多或少有点麻烦的。当然,不同开发者偏好不同,也有喜欢用Dataset开发的。不过,通常来说,DataFrame会来的更直接,简单、易用,所以通常来说DataFrame用的比较多~
2021-10-1414 - 米哈游牛浚亲想请问下,DataFrame API 最终是都会转化成codegen的生成代码吗?还是可选生成RDD或codegen呢
作者回复: 这个不是可选的哈,在Spark SQL框架下,每个执行阶段的代码,Tungsten都会尝试用whole stage code gen捏合到一起,生成一份代码。然后把捏合之后的代码,丢给Spark Core去执行
2021-10-203 - 子兮老师, spark graphX 也是会把一个stage 的算子合成一个函数执行,但是grapX 是没有用到Tungsten的,所以这种优化方式不应该是spark core 在做的吗?
作者回复: 确实有把Tungsten归类到Spark Core的范畴的,其实我觉得都OK,是归类到Spark Core还是Spark SQL,其实这个倒没那么重要,重要的是,大家理解、吃透Tungsten的各种优化机制就好了哈~
2021-11-221 - legend下面这段话中不再是透明的是不是说反了?应该是“不再是不透明的”吧? 这些计算逻辑对 Spark 来说,不再是透明的,因此,Spark 可以基于启发式的规则或策略,甚至是动态的运行时信息,去优化 DataFrame 的计算过程。2023-03-08归属地:中国香港12
- Nicky请问RDD比Dataframe有什么样的优势吗?课程中有提到RDD 算子多采用高阶函数,表达能力强,能灵活地设计并实现业务逻辑。老师可以详细讲一下RDD的价值吗?2022-12-18归属地:广东