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,了解到了它的扩展函数: ...
随机推荐
- Kafka如何保证高吞吐量
1.顺序读写 kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能 顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写 生产者负责写入 ...
- Vertica性能分析
Vertica的特点简单的说可以总结为:列存储.MPP架构.技术比较新.列存储本身带来了数据高度压缩的便利,MPP架构使得可以用相对廉价的PC级服务器横向扩展到较大规模(PB级),05年才问世使得它在 ...
- [bash-shell]构建WebAPI项目并且发布到本地
:: 清理log文件 del /S *.log echo Publish parameters initializing... ::These parameters are not used for ...
- 百度编辑器ueditor批量上传图片或者批量上传文件时,文件名称和内容不符合,错位问题
百度编辑器ueditor批量上传附件时,上传后的文件和实际文件名称错误,比如实际是文件名“dongcoder.xls”,上传后可能就成了“懂客.xls”.原因就是,上传文件时是异步上传,同时进行,导致 ...
- ROS向节点传递参数
ROS的节点有很多中调用方式,包括rosrun,launch,直接运行等,向节点内传递参数的方式也有很多. 1. rosrun + 参数服务器传递 ros::init(argc, argv, &quo ...
- 单片机成长之路(stm8基础篇)- 025 stm8 时钟切换
stm8 时钟切换; /************************************ 时钟设置 ************************************/ // 时钟 0: ...
- Loadrunner 11.00 初始化失败; 通信错误。 Error (-81024): LR_VUG: The 'WS_SOAP' type is not supported on 'WIN32' platforms .
搜索LR安装目录bin文件夹下有个“wlrun.exe”的文件,邮件点击“属性”->"兼容性"->兼容模式中选择“windows 7”,确认后重新打开即可,win10下 ...
- JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格
JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格式,应该在一个程序员的开发生涯中是常接触的.简洁和清晰的层次结构使得 JSON 成为理想的数据交换 ...
- HTTP STATUS 400 – BAD REQUEST ,SPRINGMVC错误
400大多为前台传的数据于后台接受数据不符合,注意Date数据类型最容易错. 然后需要调用实体类的空参构造方法,,注意创建了有参构造方法后,创建一个空参构造方法.
- Java内存泄漏解析!
前言: 内存管理是Java最重要的优势之一,你只需创建对象,Java垃圾收集器会自动负责分配和释放内存.但是,情况并不那么简单,因为在Java应用程序中经常发生内存泄漏. 本章会说明什么是内存泄漏,为 ...