2 个回答
RDD叫做弹性分布式数据集,与RDD类似,DataFrame是一个分布式数据容器,但是DataFrame不是类型 安全的。 DataSet是DataFrame API的一个扩展,是Spark最新的数据抽象,结合了RDD和DataFrame的优点。三者区别的区别是:
1、三者出现版本时间不同,Spark1.0开始出现RDD,Spark1.3出现Dataframe,Spark1.6有了Dataset;
2、数据表示类型不同,RDD是分布在集群中许多机器上的数据元素的分布式集合, RDD是一组表示数据的Java或Scala对象;DataFrame是命名列构成的分布式数据集合,在概念上类似于关系数据库中的表;
3、处理数据格式不同,RDD可以处理结构化和非结构化的数据;DataFrame仅适用于结构化和半结构化数据;DataSet可以处理结构化和非结构化数据,表示行(row)的JVM对象或行对象集合形式的数据;
4、编译安全类型不同,RDD提供了一种熟悉的面向对象编程风格,具有编译时类型安全性;DataFrame如果尝试访问表中不存在的列,则持编译错误,仅在运行时检测属性错误;DataSet可以在编译时检查类型, 它提供编译时类型安全性;
发布于:3个月前 (01-22) IP属地:四川省
还有以下区别:
5、序列化时不同,RDD当Spark需要在集群内分发数据或将数据写入磁盘时,会使用Java进行序列化;Spark DataFrame可以将数据序列化为二进制格式的堆外存储(在内存中),然后直接在此堆内存上执行许多转换;DataSet在序列化数据时,Spark中的数据集API具有编码器的概念,该编码器处理JVM对象与表格表示之间的转换。
6、垃圾回收不同,RDD在java和scala对象上单独执行序列化时,效率会降低,需要花费大量时间;DataFrame使用off heap内存进行序列化可以减少开销,动态生成字节代码,以便可以对该序列化数据执行许多操作;DataSet允许对序列化数据执行操作并改善内存使用。
7、聚合效率不同,RDD API执行简单的分组和聚合操作的速度较慢;DataFrame API非常易于使用,探索性分析更快,在大型数据集上创建汇总统计数据;Dataset对大量数据集执行聚合操作的速度更快。
发布于:3个月前 (01-22) IP属地:四川省
我来回答
您需要 登录 后回答此问题!