Spark 中三种数据处理对象的区别: RDD-Dataset-Dataframe
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的更多相关文章
- C#中三种定时器对象的比较 【转】
https://www.cnblogs.com/zxtceq/p/5667281.html C#中三种定时器对象的比较 ·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.W ...
- 转:VMware中三种网络连接的区别
转自:http://www.cnblogs.com/rainman/archive/2013/05/06/3063925.html VMware中三种网络连接的区别 1.概述 2.bridged( ...
- C#中三种定时器对象的比较
·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threading.Timer类里3.定义在System.Timers ...
- c++中三种继承方式的区别
public公有继承 protected保护继承 private私有继承 我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用. 公有继承时 ...
- VMware中三种网络连接的区别
1.概述 大家在安装完虚拟机后,默认安装了如下图的两块虚拟网卡——VMnet1和VMnet8,其中VMnet1是host网卡,用于host方式连接网络:VMnet8是NAT网卡,用于NAT方式连接网络 ...
- Apache Spark 2.0三种API的传说:RDD、DataFrame和Dataset
Apache Spark吸引广大社区开发者的一个重要原因是:Apache Spark提供极其简单.易用的APIs,支持跨多种语言(比如:Scala.Java.Python和R)来操作大数据. 本文主要 ...
- VMWare中三种网络连接模式的区别
VMWare中有桥接.NAT.host-only三种网络连接模式,在搭建伪分布式集群时,需要对集群的网络连接进行配置,而这一操作的前提是理解这三种网络模式的区别. 参考以下两篇文章可以更好的理解: V ...
- .net中三种数据类型转换区别((int),Int32.Parse() 和 Convert.toInt32() )
(typename)valuename,是通用方法: Convert类提供了灵活的类型转换封装: Parse方法,适用于向数字类型的转换. 例如,(int),Int32.Parse() 和 Conve ...
- js中三种定义变量 const, var, let 的区别
js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...
- 转-Web Service中三种发送接受协议SOAP、http get、http post
原文链接:web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 一.web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 在web服务中,有三种可供选择的发 ...
随机推荐
- Vue19 常用指令及自定义指令
部分转自:https://blog.csdn.net/weixin_58032613/article/details/122759818 1 常用指令 1) v-bind 单向数据绑定 https:/ ...
- ACID和CAP的比较
https://www.jdon.com/artichect/acid-cap.html 1 简介 事务机制ACID和CAP理论是数据管理和分布式系统中两个重要的概念,很不巧,这两个概念中都有相同的& ...
- 使用GetDIBits()获取Windows位图数据的标准用法,解决内存、堆栈报错问题
获取图标的位图数据 分两次使用GetDIBits(),以便于正确设置缓存的大小 正确设置BITMAPINFO的大小,否则就会报堆栈溢出错误 ICONINFO info = { 0 }; GetIcon ...
- c++标准库string的使用完美总结——十分详细,复习学习记忆都可以使用
std::string详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足 ...
- ubuntu 备份系统
1.安装Systemback: sudo add-apt-repository ppa:nemh/systemback sudo apt-get update sudo apt-get install ...
- C++ 练习11 string的使用
1 #include <iostream> 2 #include<string>//调用string函数库 3 using namespace std; 4 int main( ...
- Rpc-实现Client对ZooKeeper的服务监听
1.前言 在上一篇文章中,完成了ZooKeeper注册中心.但是在上一篇中,ZooKeeper添加了一个简单的本地缓存,存在一些问题: 当本地缓存OK,ZooKeeper对应服务有新的实例时,本地缓存 ...
- 记一次使用tika解析文件文本导致的内存溢出问题
背景 笔者曾供职于某信息安全公司,接到过一个需求,提取文档中的文本以供后续分析.tika是apache开源的解析文档内容的组件,应用十分广泛.tika几乎支持你能想到的所有文档格式,docx , pp ...
- JZOJ 3566. 【GDKOI2014】阶乘
题目 求十进制 \(n!\) 在 \(m\) 进制下末尾 \(0\) 的个数 分析 签到题 只要看 \(n!\) 有多少个 \(m\) 的倍数就好了 考虑分解 \(m\) 的质因子 然后根号计算每个因 ...
- Bus Stop
题目 题意: 大概就是在x轴上(一维),有n个房子的坐标,你要建立公交车站,使得每个房子离最近的车站不过10公里,求最少的车站. 思路: 很简单,之接贪心即可,每次判断当前房子的后20公里有没有房子, ...