4,SparkSql

一,RDD与DataFrame与DataSet的区别

1,RDD的劣势是性能限制,它是一个jvm驻内存对象,这也就决定了在GC的限制和数据增加时序列化成本的提高
2,Dataframe与RDD类似,也是一个分布式数据容器。然而DataFrame更像是传统数据库的二维表格,除了数据以外还记录数据的结构信息,即schema.同时与hive类似,DataFrame也支持嵌套数据类型struct,array和map
一张图简单说明:
4,SparkSql
由此可以看见,左侧的RDD[Person]虽然以Person为类型参数,但是Spark本身不了解Person的内部结构,而右侧的DataFrame却提供了详细的结构信息,使得SparkSql可以清楚的知道该数据集中包含哪些列,每列的名称和类型各式什么。DataFrame多了数据的结构信息,即schema.RDD是分布式java对象的集合,DataFrame是分布式的ROW对象的集合。DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化,比如filter下推裁剪等
DataFrame是为数据提供了schema的视图,可以把它当作数据库的一张表来对待
DataFrame也是懒执行的
性能上比RDD要高,主要有两方面原因
定制化内存管理:数据以二进制的方式存在于非内堆内存,节省了大量空间之外还摆脱了GC的限制
DataFrame的劣势在于编译期缺少类型安全的检查会导致运行期出错
3,DataSet
①DataFramAPI的一个扩展,是Spark最新的数据抽象
②既具有类型安全检查也具有DataFrame的查询优化特性
③DataFrame=DataSet[Row]可以通过as方法将DataFrame转换成DataSet,Row是一个类型