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服务中,有三种可供选择的发 ...
随机推荐
- spring-in-action_day02
开发web应用 # 开发Spring web应用,最基本的需要构建以下组件: 1.pojo类(从数据库获取数据) 2.pringmvc控制器 3.视图模板(页面) ##第一步 构建pojo类 p ...
- 删除resource中的图片后编译报错
同僚的一篇文章是:https://www.cnblogs.com/jljxxf/archive/2012/08/19/2646937.html, 详细介绍了C#的Resources,其中关于删除资源这 ...
- [TJOI2007]书架
题目 网上搜 分析 我们可以认为插入一本书是在树中第 \(k\) 的位置进行插入操作 其中 \(k\) 为这本放入书架后的位置 考虑 \(fhq-treap\) 实现 我们将书编号为 \([0,n-1 ...
- JZOJ 2933. 【NOIP2012模拟8.7】找位置
题目大意 有 \(n(1 \leq n \leq 10000)\) 个城镇,由 \(1 \leq m \leq 50000\) 条无向道路连接.给出 \(k(1 \leq k \leq 5) 个超市\ ...
- 计算属性报错:Maximum recursive updates exceeded.
计算属性或普通函数中有对相关依赖的响应式数据进行一次以上的更新就可能导致达到最大执行的限制: const calcSurplus = computed(() => (k: string) =&g ...
- vivado工具ila抓取的波形读取方法
保存ila文件 file-->export-->export ila_data.可以保存为ila格式或者vcd格式 (可以在modelism下转化为wlf文件后打开查看波形.) 打开保存后 ...
- 开源持续测试平台--MerterSphere
一.MeterSphere平台介绍 MeterSphere是一站式的开源持续测试平台,遵循 GPL v3 开源许可协议,涵盖测试跟踪.接口测试.UI测试和性能测试等功能,全面兼容JMeter.Sele ...
- Jmeter 快速生成测试报告
我们使用Jmeter工具进行接口测试或性能测试后一般是通过察看结果数.聚合报告等监听器来查看响应结果.一.Jmeter配置 首先要保证jmeter命令是ok的,如果你在cmd中输入jmeter -v, ...
- Google Earth Engine——基于改进的RSEI评估生态环境(水体掩膜后)
未经允许,禁止随意转载,尊重他人版权,仅供学习参考,欢迎交流. 背景介绍 遥感生态指数(Remote Sensing Ecological Index)的获得,是使用主成分分析法耦合了绿度.湿度.干度 ...
- C# Post调用接口并传递json参数
1 public string Post(string Url, string jsonParas) 2 { 3 string strURL = Url; 4 //创建一个HTTP请求 5 HttpW ...