1,对比表:

  RDD Dataframe Dataset
版本 1.0 1.3 1.6
描述 分布式数据集合 行列化的分布式数据集合  RDD 和 DataFrame的结合
数据格式 结构化和非结构化都可以 结构化和半结构化都可以 结构化和非结构化都可以
数据源 多种 多种 多种
不变性和互通性 容易转化为dataframe 转化到dataframe ,失去原RDD. 转化后,原RDD会重新生成
编译类型安全 类型安全 不安全 , 运行时出错 安全
优化器 无内置优化引擎 ,每个 RDD单独优化. 查询经过优化,通过使用 Catalyst optimizer. 和dataframe一样
序列化

使用java 序列化编码数据,花销大;需要在节点之间传输数据及其结构

不需要使用java 序列化编码数据 ,序列化只发生在内存二进制中。

编码器处理 jvm对象和表格的转换,比java 序列化更快

垃圾处理

创建和销毁单个对象时,产生垃圾数据消耗

创建和销毁对象时,不会产生垃圾数据集

不需要jvm垃圾处理
效率

单个对象序列化降低效率

内存内的 序列化消耗小;不需要 反序列化,可直接处理操作序列化数据。

访问单个属性不需要序列化整个对象。
Lazy处理
语言支持 Java Scala Python R Java Scala Python R Java Scala
模式预测 人工定义schema 自动发现数据文件模式 自动发现数据文件模式
聚合操作 聚合和分组操作很困难

探索性分析和 聚合统计 性能都 比较好

海量数据聚合比较快

2,适合使用 RDD的场景

  1,数据是非结构化的,比如 多媒体或者文本流数据

  2,底层次的转化操作适合使用 low - level API

  3,  模式不重要的场合 。

3,适合使用 dataset 的场景

  1,   编译时类型安全对开发者更有效率, 编译器能捕捉大部分错误。

  2,适合处理结构化 数据和半结构化数据。

  3,高级API 更容易使用  , 适合 数据的 高层次处理,列式函数, sql操作。

补充;在spark 2.0 , 把  DataFrame 和 Dataset 合并到一个类。dataset api具有 Strongly-Typed API 和 Untyped API 2 种形式。 Java   和 Scala使用  Strongly-Typed API , 但是因为 python 和 R 是动态语言,使用Untyped API 。

Spark 中三种数据处理对象的区别: RDD-Dataset-Dataframe的更多相关文章

  1. C#中三种定时器对象的比较 【转】

    https://www.cnblogs.com/zxtceq/p/5667281.html C#中三种定时器对象的比较 ·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.W ...

  2. 转:VMware中三种网络连接的区别

    转自:http://www.cnblogs.com/rainman/archive/2013/05/06/3063925.html VMware中三种网络连接的区别   1.概述 2.bridged( ...

  3. C#中三种定时器对象的比较

    ·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threading.Timer类里3.定义在System.Timers ...

  4. c++中三种继承方式的区别

    public公有继承 protected保护继承 private私有继承 我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用. 公有继承时 ...

  5. VMware中三种网络连接的区别

    1.概述 大家在安装完虚拟机后,默认安装了如下图的两块虚拟网卡——VMnet1和VMnet8,其中VMnet1是host网卡,用于host方式连接网络:VMnet8是NAT网卡,用于NAT方式连接网络 ...

  6. Apache Spark 2.0三种API的传说:RDD、DataFrame和Dataset

    Apache Spark吸引广大社区开发者的一个重要原因是:Apache Spark提供极其简单.易用的APIs,支持跨多种语言(比如:Scala.Java.Python和R)来操作大数据. 本文主要 ...

  7. VMWare中三种网络连接模式的区别

    VMWare中有桥接.NAT.host-only三种网络连接模式,在搭建伪分布式集群时,需要对集群的网络连接进行配置,而这一操作的前提是理解这三种网络模式的区别. 参考以下两篇文章可以更好的理解: V ...

  8. .net中三种数据类型转换区别((int),Int32.Parse() 和 Convert.toInt32() )

    (typename)valuename,是通用方法: Convert类提供了灵活的类型转换封装: Parse方法,适用于向数字类型的转换. 例如,(int),Int32.Parse() 和 Conve ...

  9. js中三种定义变量 const, var, let 的区别

    js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...

  10. 转-Web Service中三种发送接受协议SOAP、http get、http post

    原文链接:web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 一.web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 在web服务中,有三种可供选择的发 ...

随机推荐

  1. 计算机网络基础08 Socket网络通信

    部分内容来自:https://www.jianshu.com/p/066d99da7cbd 1  七层网络架构 在解释socket之前,先了解下七层网络架构 https://www.cnblogs.c ...

  2. VM安装Centos 经典安装

    1 VM安装配置 1.1 新建虚拟机 1.2 选择典型 1.3 选择CentOS镜像 链接:https://pan.baidu.com/s/1K2rTjrWY5sgEgx2pU0x-gg 提取码:89 ...

  3. 【ASP.NET Core】标记帮助器——元素筛选

    前一篇中老周从标记帮助的底层介绍关键性的接口,如 ITagHelper ,它是一个标志,用于识别哪些类属于 Tag Helper. 标记帮助器毕竟是针对 HTML 标记的,所以得筛选.说白了就是我写的 ...

  4. 微信小程序分类菜单激活状态跟随列表滚动自动切换

    这里主要用到微信小程序提供的SelectorQuery获取页面节点信息实现,组件用的是微信小程序的scroll-view 逻辑就是获取右侧盒子的节点信息,获取右侧子分类的节点信息,当子分类滑动到顶部的 ...

  5. JavaScript的this指向详解

    一.概念: 函数的上下文(this)由调用函数的方式决定,function是"运行时上下文"策略: 函数如果不调用,则不能确定函数的上下文. 二.规则: 对象打点调用它的方法函数, ...

  6. STL中的智能指针(Smart Pointer)及其源码剖析: std::unique_ptr

    STL中的智能指针(Smart Pointer)及其源码剖析: std::unique_ptr 和 std::auto_ptr一样,std::unique_ptr也是一种智能指针,它也是通过指针的方式 ...

  7. MQ收到无序的消息时如何进行业务处理

    业务背景 跟第三方系统做对接,双方通过ActiveMQ进行通信,消息之间是有内在关联的,也就是消息本来应该是有业务顺序的,但由于一些原因,现在收到消息是乱序的,这种情况下做业务处理就有一点小问题了 方 ...

  8. 使用一个文件集中管理你的 Nuget 依赖版本号

    在 .net 7 以前,项目对于 nuget 依赖项的版本依赖散落与解决方案的各个角落.这导致升级维护和查看的时候都比较麻烦.在 .net 7 中,你可以使用一个文件来集中管理你的 Nuget 依赖版 ...

  9. CSP2022 S游记

    9.26:开坑. 没报 J 组主要是因为 J 比较垃圾,去抢小朋友的一等没什么意思. 初赛 刚拿到试卷就直接懵了,这 tm 是给人做的题?宇宙射线是什么奇妙东西,还有基数排序我根本不会啊,这个阅读程序 ...

  10. Mars3D与第三方集成

    1. 引言 Mars3D是基于Cesium的Web端的三维GIS库,对Cesium做了进一步封装和扩展 Mars3D官网:Mars3D三维可视化平台 | 火星科技 Mars3D开发手册:开发教程 - ...