SparkSQL 中 RDD 、DataFrame 、DataSet 三者的区别与联系
一、SparkSQL发展:
Shark是一个为spark设计的大规模数据仓库系统,它与Hive兼容
1.0以前: Shark
1.1.x开始:SparkSQL(只是测试性的) SQL
1.3.x: SparkSQL(正式版本)+Dataframe
1.5.x: SparkSQL 钨丝计划
1.6.x: SparkSQL+DataFrame+DataSet(测试版本)
2.x:
- SparkSQL+DataFrame+DataSet(正式版本)
- SparkSQL:还有其他的优化
- StructuredStreaming(DataSet)
spark on hive :这里的hive只做数据的存储,sql由spark来解析并执行。
hive on spark:这里hive用来解析sql语句,spark来执行。
二、 RDD 、DataFrame 、DataSet 三者的区别与联系:
RDD前置知识:
优点:
编译时类型安全:编译时就能检查出类型错误
面向对象的编程风格:直接通过类名点的方式来操作数据
缺点:
序列化和反序列化的性能开销
无论是集群间的通信, 还是 IO 操作都需要对对象的结构和数据进行序列化和反序列化。
GC 的性能开销 ,频繁的创建和销毁对象, 势必会增加 GC
spark2.0中,引入SparkSession作为DataSet和DataFrame API的切入点
2、DataFrame :DataFrame与RDD的主要区别在于,DataFrame引入了 schema 表结构元信息、 off-heap 堆外内存。
schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。Spark通过 schema 就能够读懂数据, 因此在通信和 IO 时就只需要序列化和反序列化数据, 而结构的部分就可以省略了。
off-heap 堆外内存,意味着 JVM堆以外的内存, 这些内存直接受操作系统管理(而不是 JVM)。Spark能够以二进制的形式序列化数据(不包括结构)到 off-heap 中, 当要操作数据时,就直接操作 off-heap 内存。由于 Spark 理解 schema,所以知道该如何操作。off-heap 就像地盘,schema 就像地图,Spark有地图又有自己地盘了,就可以自己说了算了,不再受 JVM的限制,也就不再收 GC 的困扰了。
缺点:DataFrame 不是类型安全的,API也不是面向对象风格的。
这里的类型安全是指:编译时检查类型是否合法,例如程序需要 new A()你传了一个 B类 过来。不会出现变量的类型错误。

3、DataSet:DataSet结合了RDD和DataFrame的优点,即类型安全,又高效。
DataSet结合了 RDD和 DataFrame 的优点,并带来的一个新的概念 Encoder 编码器。当序列化数据时,Encoder产生字节码与 off-heap 进行交互,能够达到按需访问数据的效果,而不用反序列化整个对象。Spark还没有提供自定义 Encoder 的 API,但是未来会加入。
RDD 和 DataSet区别:
DataSet以 Catalyst 逻辑执行计划表示,并且数据以编码的二进制形式被存储,不需要反序列化就可以执行 sorting、shuffle 等操作。DataSet创立需要一个显式的 Encoder,把对象序列化为二进制,可以把对象的 scheme映射为 Spark SQL类型,然而 RDD 依赖于运行时反射机制。DataSet比 RDD 性能要好很多。
DataFrame 和 DataSet区别:
Dataset可以认为是 DataFrame 的一个特例,主要区别是 Dataset 每一个 record存储的是一个强类型值而不是一个 Row。因此具有如下三个特点:
⚫ DataSet可以在编译时检查类型
⚫ DataSet是面向对象的编程接口。
⚫ 后面版本 DataFrame 会继承 DataSet,DataFrame 是面向 Spark SQL的接口。
DataFrame 和 DataSet可以相互转化,df.as[ElementType]这样可以把 DataFrame 转化为DataSet,ds.toDF()这样可以把 DataSet 转化为 DataFrame
参考博客:DataSet https://www.cnblogs.com/frankdeng/p/9301760.html
参考博客:sparkSql https://www.cnblogs.com/frankdeng/p/9301743.html
SparkSQL 中 RDD 、DataFrame 、DataSet 三者的区别与联系的更多相关文章
- sparkSQL中RDD——DataFrame——DataSet的区别
spark中RDD.DataFrame.DataSet都是spark的数据集合抽象,RDD针对的是一个个对象,但是DF与DS中针对的是一个个Row RDD 优点: 编译时类型安全 编译时就能检查出类型 ...
- spark的数据结构 RDD——DataFrame——DataSet区别
转载自:http://blog.csdn.net/wo334499/article/details/51689549 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接 ...
- APACHE SPARK 2.0 API IMPROVEMENTS: RDD, DATAFRAME, DATASET AND SQL
What’s New, What’s Changed and How to get Started. Are you ready for Apache Spark 2.0? If you are ju ...
- spark-sql中的DataFrame文件格式转储示例
SparkConf sparkConf = new SparkConf() // .setMaster("local") .setAppName("DataFrameTe ...
- RDD, DataFrame or Dataset
总结: 1.RDD是一个Java对象的集合.RDD的优点是更面向对象,代码更容易理解.但在需要在集群中传输数据时需要为每个对象保留数据及结构信息,这会导致数据的冗余,同时这会导致大量的GC. 2.Da ...
- spark rdd df dataset
RDD.DataFrame.DataSet的区别和联系 共性: 1)都是spark中得弹性分布式数据集,轻量级 2)都是惰性机制,延迟计算 3)根据内存情况,自动缓存,加快计算速度 4)都有parti ...
- RDD、DataFrame、Dataset三者三者之间转换
转化: RDD.DataFrame.Dataset三者有许多共性,有各自适用的场景常常需要在三者之间转换 DataFrame/Dataset转RDD: 这个转换很简单 val rdd1=testDF. ...
- android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别
android Activity类中的finish().onDestory()和System.exit(0) 三者的区别 Activity.finish() Call this when your a ...
- jQuery中,$.extend,$obj.extend和$.fn.extend三者的区别
jQuery中,$.extend,$obj.extend和$.fn.extend三者的区别 现在做的一个项目,所使用的框架是基于jQuery扩展的,于是平时学了一下jQuery,了解到了它的扩展函数: ...
随机推荐
- mysql性能的检查和优化方法
这个命令可以看到当前正在执行的sql语句,它会告知执行的sql.数据库名.执行的状态.来自的客户端ip.所使用的帐号.运行时间等信息 mysql在遇到严重性能问题时,一般都有这么几种可能:1.索引没有 ...
- Java & Android未捕获异常处理机制
一.背景 无论是Java还是Android项目,往往都会用到多线程.不管是主线程还是子线程,在运行过程中,都有可能出现未捕获异常.未捕获异常中含有详细的异常信息堆栈,可以很方便的去帮助我们排查问题. ...
- python输入一个字符串,输出翻转后的字符串(翻转字符串)
题目:输出一个字符串,输出翻转后的字符串.例如:输入字符串a123,输出321a. 方法一:使用列表的reverse方法 string=input('请输入一个字符串:') lst=list(stri ...
- Javascript 日历插件
1. The Coolest Calendar 界面非常漂亮的一款日期选择插件,有详细的使用文档,最新版本 1.5. 点击下载 查看示例 2. DatePicker 这款日期插件支持单选.多选和 ...
- asp.net 版本一键升级,后台直接调用升级脚本
应客户需求,要求实现一个版本一键升级的功能,咨询过同事之后弄了个demo出来,后台代码如下: //DBConnModelInfo:连接字符串的对象 (包含数据库实例名,数据库名,登陆名,登陆密码) p ...
- 【翻译】Tusdotnet中文文档(2)事件
tusdotnet-----一个tus文件上传协议的实现之事件 本章接上篇来继续翻译Tusdotnet的文档,按照如下结构来翻译: 事件 OnAuthorize OnFileComplete OnBe ...
- vue单元素/组件的过渡
(1)过渡的类名 v-enter:定义进入过渡的开始状态.在元素被插入之前生效,在元素被插入之后的下一帧移除. v-enter-active:定义进入过渡生效时的状态.在整个进入过渡的阶段中应用,在元 ...
- vue+element省市县的二级联动功能
项目中有选择省市县的需求,先选择省,再选择县 解决这个需求也不是很难,总体思路就是看后端接口, 一般后端接口都是请求参数为 0 返回省的数据,不为 0 的话返回相对应的市的数据 template代码: ...
- Android 一个TextView中设置多种不同大小的字体,设置超链接
以前项目中要是遇到这样的UI设计,都是傻不拉唧的分为三个TextView来实现,今天在微信中无意中看了一篇公众号文章,发现原来只要一个TextView就可以搞定啦,人生最悲哀的事情莫过于工作了这么久啦 ...
- SqlServer数据库优化之索引、临时表
问题:工作是查询一张500万多条数据的表时,查询总是很慢,于是进行优化. --查询表所有索引 use RYTreasureDB EXEC Sp_helpindex [RecordDrawScore] ...