RDD,DataFrame,Dataset的相同点和区别

相同点:
都是弹性分布式数据集,都有分区的概念和惰性机制,在进行创建、转换操作时不会立即执行,只有在遇到执行算子时,才会开始遍历计算。

区别
假设RDD中的两行数据长这样:
在这里插入图片描述
那么DataFrame中的数据长这样 :
RDD,DataFrame,Dataset的相同点和区别_第1张图片
那么Dataset中的数据长这样:
RDD,DataFrame,Dataset的相同点和区别_第2张图片

或者长这样(每行数据是个Object):
RDD,DataFrame,Dataset的相同点和区别_第3张图片

  • RDD是一个JVM驻内存对象,GC比较频繁,数据增加时Java序列化成本也会升高,不支持SparkSql,类型转化安全。
  • DataFrame包括数据的结构信息,类似于关系型数据库中的表,性能上比RDD要高。数据是弱类型的,在执行时检查类型,类型转化不安全,不能直接获取每一列的值。数据以二进制的方式存在于堆外内存,减少了GC次数。
  • Dataset可以认为是DataFrame的一个特例,数据只有一列,每一行的数据类型不确定,采用堆外内存存储,数据是强类型的,在编译时检查类型,类型转化安全。

当我们需要对数据集进行底层的转换和操作, 使用RDD。
当我们需要对数据进行高级处理时,使用DataFrame和Dataset。

你可能感兴趣的:(Spark)