Spark 中三种数据处理对象的区别: RDD-Dataset-Dataframe
2024-09-18 13:26:31
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 。
最新文章
- ThinkPHP实现定时任务
- Mysql逻辑模块组成
- 标准I/O库之打开和关闭流
- POJ 3126 Prime Path 素数筛,bfs
- 大到可以小说的Y组合子(零)
- Snow and Rainbow
- PHP面向对象之const常量修饰符
- getopt for windows
- css实现文本缩略显示
- ubuntu14.04上面安装ia32-libs
- DNS解析类型的区别
- Windows下杀掉全部的子线程
- [SP10628]Count on a tree
- Scala 按名称参数调用函数 与 =>;的用法
- SqlServer主键
- 【Java多线程】线程状态、线程池状态
- pandas基础
- 使用iometer测试
- SpringCloud之服务注册-eureka
- VI编辑,配置文件
热门文章
- CoppeliaSim(原V-REP)教育版不给下载的解决方法
- 【ccc】为了ds的ccc
- 源码下载teb
- Java ”框架 = 注解 + 反射 + 设计模式“ 之 注解详解
- vue ie11 缺少 ':' html
- 把 URL 中文和一堆百分号转换成字符串
- PKU2506Tiling
- 【C学习笔记】day5-3 编写代码模拟三次密码输入的场景
- python spacy [E050] Can't find model 'en_core_web_sm'
- 金蝶AAS-V9精简版使用手册1.6