SparkSql: 多数据集抽象类型对比分析及使用场景

spark抽象数据集列表

RDD 		弹性分布式数据集
DataFrame   与RDD相似,增加了数据结构scheme描述信息部分。	比RDD更丰富的算子,更有利于提升执行效率、减少数据读取、执行计划优化。
DataSets  	集成了RDD强类型和DataFrames结构化的优点,新数据抽象类型,比RDD更丰富的算子,更有利于提升执行效率、减少数据读取、执行计划优化。

1.相同点

1.全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利
2.三者都有惰性机制,在进行Transform操作时不会立即执行,在遇到Action操作时会正式提交作业执行。
3.均采用spark的内存运算和优化策略,内存使用和执行效率上均可以得到保障。
4.均有partition的概念,便于分布式并行计算处理,达到分而治之。
5.均有许多共同的函数,如map、filter、sort等。
6.在进行三者的相关操作时候,个别特殊操作时必须引入一个相同的包依赖。( 早期称为 import sqlContext.implicits.,最新版本称为import spark.implicits.)
7.DF和DS均可以通过模式匹配获取内部的变量类型和值。
8.DF和DS产生于SparkSql,天然支持SparkSql。

2.区别点

RDD
1.不支持SparkSql操作,均需进行转成DF或是DS才行。
2.类型是安全的,编译时候即可检查出类型错误。(强类型)
3.机器间通信、IO操作均需要序列化、反序列化对象,性能开销大。
DataFrame
1.有scheme的RDD:比RDD增加了数据的描述信息。
2.比RDD的API更丰富,增加了针对结构化数据API。
3.只有一个固定类型的DataSet,即为DataFrame=DataSet[Row]
4.序列化和反序列化时做了结构化优化,减少了不必要的结构化信息的序列化,提高了执行效率。
DataSet
1.强类型的DataFrame,与DF有完全相同的成员函数。
2.每行的类型不固定,需要使用模式匹配case class后,获取实际的类信息、字段类型、字段值。
3.访问对象数据时,比DF更加直接简单。
4.在序列化和反序列化时,引入了Encoder机制,达到按需序列化和反序列化,不必像之前整个对象操作了,进一步提高了效率。

3.应用场景

使用RDD场景
数据为非结构化,如流媒体等数据
对数据集进行底层的转换、处理、控制
不需要列式处理,而是通过常规的对象.属性来使用数据。
对DF、DS带来的开发效率、执行效率提升不敏感时
使用DF(必须)
R或是python语言开发者,使用DF
使用DS(必须)
在编译时就有高度的类型安全,想要有类型的JVM对象,用上Catalyst优化,并得益于Tungsten生成的高效代码
使用DF、DS场景
需要丰富的语义、高级抽象和特定领域专用的API时
处理需要对半结构化数据进行高级处理,如filter、map、aggregation、average、sum、SQL查询、列式访问或使用lambda函数
在不同的Spark库之间使用一致和简化的API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值