4,SparkSql

一,RDD与DataFrame与DataSet的区别

1,RDD的劣势是性能限制,它是一个jvm驻内存对象,这也就决定了在GC的限制和数据增加时序列化成本的提高
2,Dataframe与RDD类似,也是一个分布式数据容器。然而DataFrame更像是传统数据库的二维表格,除了数据以外还记录数据的结构信息,即schema.同时与hive类似,DataFrame也支持嵌套数据类型struct,array和map
一张图简单说明:
在这里插入图片描述
由此可以看见,左侧的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是一个类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值