🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
:-: **RDD、Dataset 及 DataFrame 对比** |类型 |优点 |缺点 | | --- | --- | --- | |RDD |1. 内置很多函数操作,group,map,filter 等,方便处理结构化或非结构化数据;<br/><br/>2. 面向对象编程,直接存储的 java 对象,类型转化也安全;|1. 由于它基本和 hadoop 一样万能的,因此没有针对特殊场景的优化,比如对于结构化数据处理相对于 sql 来比非常麻烦;<br/><br/>2. 默认采用的是 java 序列号方式,序列化结果比较大,而且数据存储在 java 堆内存中,导致 gc 比较频繁;| |DataFrame | 1. 结构化数据处理非常方便,支持 Avro, CSV, elastic search, Cassandra 等 kv 数据,也支持HIVE tables, MySQL 等传统数据表;<br/><br/>2. 有针对性的优化,由于数据结构元信息 spark已经保存,序列化时不需要带上元信息,大大的减少了序列化大小,而且数据保存在堆外内存中,减少了 gc 次数;<br/><br/>3. hive 兼容,支持 hql,udf 等|1. 编译时不能类型转化安全检查,运行时才能确定是否有问题;<br/><br/>2. 对于对象支持不友好,rdd 内部数据直接以 java 对象存储,DataFrame 内存存储的是 row对象而不能是自定义对象;| |Dataset | 1. Dataset 整合了 RDD 和 DataFrame 的优点,支持结构化和非结构化数据;<br/><br/>2. 和 RDD 一样,支持自定义对象存储;<br/><br/>3. 和 DataFrame 一样,支持结构化数据的 sql查询;<br/><br/>4. 采用堆外内存存储,gc 友好;| 很多情况下,Dataset 的性能实际上是会比 DataFrame 要来得差的,因为 Dataset 会涉及到额外的数据格式转换成本;|