三种数据模型都是spark对数据计算过程中的呈现形式且都是分布式数据集合。
从spark发展历程详解这三种数据模型:
spark1.0有的RDD,是spark数据据模型的核心底座,通过spark读取数据源到内存中时都是统一的数据模型叫RDD,是一个纯粹的没有任何修饰的数据集合;对RDD的操作只能通过各个算子来进行,比如map,filter,reduceByKey等细粒度的数据处理,需要开发人员写很多基于业务实现的lamda表达式,开发成本高。对于那种很有规则的结构化数据,能不能操作更简单些用贴近业务需求的SQL语句来操作,然后开始发展。
spark1.3有DataFrame,不在像RDD那样原始数据什么样读到内存中就是啥样,是在RDD的基础上增加一个带表结构的Schema,让读到内存中的数据瞬间变成了一张结构化的表,就可以通过熟悉的SQL语句来用更贴近业务需要的方式对数据操作;但有个缺陷对于数据类型的检查不敏感只有程序在运行时才会被发现存在类型错误,这就影响工作效率,继续发展。
spark1.6有DataSet,在原来DataFrame基础上加入了编译期字段类型检查,如果代码中有对数据类型的误操作可以直接在编译期发现提高开发效率。
spark2.0为了进一步提高数据处理的灵活性,又将DataFrame和DateSet这两个API给统一了,把DataFrame定义为一种特殊的DataSet,之后只有RDD和DataSet两种数据模型。技术永远朝着高效和易用的方向发展,但RDD还是没有被淘汰,因为RDD是spark的数据底座,本质上所有的数据处理还是基于RDD只不过是为了方便我们对数据以更贴近业务的方式操作才有DataFrame和DataSet;而且对于一些非结构化的日志数据,刚用spark读进来是没有办法直接结构化的,只能用RDD通过算子对数据进行规整化处理后才能转化成DataSet。
当对数据进行细粒度的操作和控制且数据本身不带Schema的话用RDD,因为它提供的是low level API;而数据本身带Schema且又想通过SQL来像操作一张表操作数据选择DataSet。