一、SparkSQL发展:

  Shark是一个为spark设计的大规模数据仓库系统,它与Hive兼容

     Shark建立在Hive的代码基础上,并通过将Hive的部分物理执行计划交换出来(by swapping out the physical execution engine part of Hive)。这个方法使得Shark的用户可以加速Hive的查询,但是Shark继承了Hive的大且复杂的代码基线使得Shark很难优化和维护。随着我们遇到了性能优化的上限,以及集成SQL的一些复杂的分析功能,我们发现Hive那位MapReduce设计的框架限制了Shark的发展。
  基于上述的理由我们停止Shark这个独立项目的开发,而转向spark SQL。Spark SQL是作为spark一个组件,充分利用spark的有事从头开始设计的。这种新的设计使我们数据更快,且最终交付给用户一个体验更好且更强大的工具。
  对于SQL用户,spark SQL提供很好的性能并且与Shark、Hive兼容。(性能提高一个数量级)。
  对spark用户,spark SQL提供了对结构化数据的简便( narrow-waist)操作。那是真正的为高级的数据分析统一了SQL(结构化查询语言)与命令式语言的混合使用。
  对开源的高手来说,Spark SQL提供了新颖而优雅的构建查询计划的方法。人们可以很容易添加新的优化到这个框架内。我们也被开源贡献者的热情所感动

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 三者的区别与联系的更多相关文章

  1. sparkSQL中RDD——DataFrame——DataSet的区别

    spark中RDD.DataFrame.DataSet都是spark的数据集合抽象,RDD针对的是一个个对象,但是DF与DS中针对的是一个个Row RDD 优点: 编译时类型安全 编译时就能检查出类型 ...

  2. spark的数据结构 RDD——DataFrame——DataSet区别

    转载自:http://blog.csdn.net/wo334499/article/details/51689549 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接 ...

  3. 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 ...

  4. spark-sql中的DataFrame文件格式转储示例

    SparkConf sparkConf = new SparkConf() // .setMaster("local") .setAppName("DataFrameTe ...

  5. RDD, DataFrame or Dataset

    总结: 1.RDD是一个Java对象的集合.RDD的优点是更面向对象,代码更容易理解.但在需要在集群中传输数据时需要为每个对象保留数据及结构信息,这会导致数据的冗余,同时这会导致大量的GC. 2.Da ...

  6. spark rdd df dataset

    RDD.DataFrame.DataSet的区别和联系 共性: 1)都是spark中得弹性分布式数据集,轻量级 2)都是惰性机制,延迟计算 3)根据内存情况,自动缓存,加快计算速度 4)都有parti ...

  7. RDD、DataFrame、Dataset三者三者之间转换

    转化: RDD.DataFrame.Dataset三者有许多共性,有各自适用的场景常常需要在三者之间转换 DataFrame/Dataset转RDD: 这个转换很简单 val rdd1=testDF. ...

  8. android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别

    android Activity类中的finish().onDestory()和System.exit(0) 三者的区别 Activity.finish() Call this when your a ...

  9. jQuery中,$.extend,$obj.extend和$.fn.extend三者的区别

    jQuery中,$.extend,$obj.extend和$.fn.extend三者的区别 现在做的一个项目,所使用的框架是基于jQuery扩展的,于是平时学了一下jQuery,了解到了它的扩展函数: ...

随机推荐

  1. FontForge 汉化教程

    引用 :http://www.sucaijishi.com/2018/articles_0815/258.html FontForge是一款免费字库编辑工具,官方暂不提供简体中文,本文汉化方法在201 ...

  2. .net core —— 控制台如何获取配置文件的内容?

    本文链接:https://blog.csdn.net/yenange/article/details/82457761参考: https://github.com/liuzhenyulive/Json ...

  3. 程序员需要了解的linux常用命令

    网络 找出某程序(tomcat)的进程 ps -ef|grep tomcat     找出后如果要关闭 kill -9 pid统计某程序(tomcat)连接数 ps -ef|grep tomcat|w ...

  4. 用友U8删除采购转固卡片后,再次转固找不到采购订单,且其他订单转固报错

    问题描述 1.用户反馈删除两张之前通过采购转固定资产的卡片后,想要再次生成卡片时候,却找不到这两张卡片. 2.用户尝试对其他未转固定资产的订单进行转固,在保存卡片时提示“本次结转将放弃全部已完成的业务 ...

  5. Unity Shader 屏幕后效果——景深

    景深效果的原理是,在摄像机的近裁剪平面和远裁剪平面之间可以设置一个焦距,在这个距离所在的平面上的物体最为清晰,而这个距离之前或之后的物体成像是一种模糊状态(根据距离逐渐模糊,最终达到最为模糊的状态). ...

  6. ImageView的adjustViewBounds属性

    adjustViewBounds属性的定义如下: 调整ImageView的边界,使得ImageView和图片有一样的宽高比 这个属性只有在ImageView一边如宽度或高度固定,一边为wrap_con ...

  7. 关于eclipse SE版本不支持建立web工程的问题

    关于eclipse SE版本不支持建立web工程的问题 我们会发现 JAVA eclipse SE版本无法建立 Web 程序的问题...... 最好的解决方法就是下载一个myeclipse 或 Jav ...

  8. 浅析libuv源码-node事件轮询解析(1)

    好久没写东西了,过了一段咸鱼生活,无意中想起了脉脉上面一句话: 始终保持自己的竞争力.所以,继续开写! 一般的JavaScript源码看的已经没啥意思了,我也不会写什么xx入门新手教程,最终决定还是啃 ...

  9. WPF WebBrowser抑制Suppress 弹出 脚本错误 对话框 但是样式改变 需要继续改善

    1.添加引用 using System.Reflection;using System.Windows.Controls; 2.静态类扩展方法(this) public static class We ...

  10. 关于ipad设备滚动条无法滚动的解决办法

    天做一个功能在ipad设备上滚动条无法滚动,于是百度了下,在需要产生滚动的div上面加入以下css(-webkit-overflow-scrolling:touch,overfolw:scroll), ...