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 。

最新文章

  1. ThinkPHP实现定时任务
  2. Mysql逻辑模块组成
  3. 标准I/O库之打开和关闭流
  4. POJ 3126 Prime Path 素数筛,bfs
  5. 大到可以小说的Y组合子(零)
  6. Snow and Rainbow
  7. PHP面向对象之const常量修饰符
  8. getopt for windows
  9. css实现文本缩略显示
  10. ubuntu14.04上面安装ia32-libs
  11. DNS解析类型的区别
  12. Windows下杀掉全部的子线程
  13. [SP10628]Count on a tree
  14. Scala 按名称参数调用函数 与 =>的用法
  15. SqlServer主键
  16. 【Java多线程】线程状态、线程池状态
  17. pandas基础
  18. 使用iometer测试
  19. SpringCloud之服务注册-eureka
  20. VI编辑,配置文件

热门文章

  1. CoppeliaSim(原V-REP)教育版不给下载的解决方法
  2. 【ccc】为了ds的ccc
  3. 源码下载teb
  4. Java ”框架 = 注解 + 反射 + 设计模式“ 之 注解详解
  5. vue ie11 缺少 ':' html
  6. 把 URL 中文和一堆百分号转换成字符串
  7. PKU2506Tiling
  8. 【C学习笔记】day5-3 编写代码模拟三次密码输入的场景
  9. python spacy [E050] Can't find model 'en_core_web_sm'
  10. 金蝶AAS-V9精简版使用手册1.6