Spark RDD、DataFrame和DataSet的区别
来源:互联网 发布:yy软件怎么上马甲 编辑:程序博客网 时间:2024/05/16 09:31
RDD
优点:
- 编译时类型安全
编译时就能检查出类型错误 - 面向对象的编程风格
直接通过类名点的方式来操作数据
缺点:
- 序列化和反序列化的性能开销
无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进行序列化和反序列化. - GC的性能开销
频繁的创建和销毁对象, 势必会增加GC
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
DataFrame
DataFrame引入了schema和off-heap
schema : RDD每一行的数据, 结构都是一样的. 这个结构就存储在schema中. Spark通过schame就能够读懂数据, 因此在通信和IO时就只需要序列化和反序列化数据, 而结构的部分就可以省略了.
off-heap : 意味着JVM堆以外的内存, 这些内存直接受操作系统管理(而不是JVM)。Spark能够以二进制的形式序列化数据(不包括结构)到off-heap中, 当要操作数据时, 就直接操作off-heap内存. 由于Spark理解schema, 所以知道该如何操作.
off-heap就像地盘, schema就像地图, Spark有地图又有自己地盘了, 就可以自己说了算了, 不再受JVM的限制, 也就不再收GC的困扰了.
通过schema和off-heap, DataFrame解决了RDD的缺点, 但是却丢了RDD的优点. DataFrame不是类型安全的, API也不是面向对象风格的.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
DataSet
DataSet结合了RDD和DataFrame的优点, 并带来的一个新的概念Encoder
当序列化数据时, Encoder产生字节码与off-heap进行交互, 能够达到按需访问数据的效果, 而不用反序列化整个对象. Spark还没有提供自定义Encoder的API, 但是未来会加入.
下面看DataFrame和DataSet在2.0.0-preview中的实现
下面这段代码, 在1.6.x中创建的是DataFrame
- 1
- 2
- 3
- 4
- 5
- 6
但是同样的代码在2.0.0-preview中, 创建的虽然还叫DataFrame
- 1
- 2
- 3
- 4
但是其实却是DataSet, 因为DataFrame被声明为Dataset[Row]
- 1
- 2
- 3
- 4
- 5
因此当我们从1.6.x迁移到2.0.0的时候, 无需任何修改就直接用上了DataSet.
下面是一段DataSet的示例代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
参考
Introducing Apache Spark Datasets
APACHE SPARK: RDD, DATAFRAME OR DATASET?
RDD、DataFrame和DataSet的区别
Spark 2.0.0-preview 官方文档
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame和DataSet的区别
- Spark RDD、DataFrame、DataSet区别和联系
- Spark 之 RDD、DataFrame和DataSet的区别是什么
- Spark 之 RDD、DataFrame和DataSet的区别是什么
- RDD、DataFrame和DataSet的区别
- RDD、DataFrame和DataSet的区别
- RDD、DataFrame和DataSet的区别
- RDD、DataFrame和DataSet的区别
- Hdfs的JAVA客户端基本操作
- Linux apache-activemq安装及配置
- 简书那些事儿
- 每年10万被动收入目标分解 | 进击
- Java锁----Lock实现原理
- Spark RDD、DataFrame和DataSet的区别
- JavaScript学习(二)
- xampp中mysql启动又自动关闭
- reactNative中的导航页面
- win7下安装tornado以及python环境
- redis -- 过期 淘汰 事务原子机制
- The basics of OFDM ——Fourier Transform
- 对线程的新的认识.线程句柄和线程ID
- maven的核心概念&Maven仓库管理