dateSet 、rdd 和dateframe 区别

三种数据结构出现的版本顺序

RDD (Spark1.0) --> Dataframe(Spark1.3) --> Dataset(Spark1.6)

RDD 

rdd的五大特性 这个用了很多,但是当突然被问到五大特性时,竟然一时卡壳,只记得弹性可分区和容错 ,而血统、依赖和数据本地化并没有归并到特性中,重新查看资料后,发现自己错在把rdd当成一种数据集合,

  1.   可分区列表:可以创建指定分区数目,可以生成新的rdd来改变分区数
  2.  作用在分区的函数:rdd的计算都是以分区为单位
  3. 依赖关系:rdd记录上级rdd是谁,从而实现容错和计算,也称为血统
  4. 分区函数:计算数据应该发往哪一个分区,作用在key-value 类型的数据
  5. 数据本地化:移动数据不如移动计算,因此需要记录每一个rdd分区最好存在什么位置

 

dateSet和DateFrame

dateSet中的底层是rdd,数据类型是InternalRow,即不论存入的数据是什么类型,在底层处理的数据结构都是InternalRow

val internalRDD: RDD[InternalRow] = dataset.queryExecution.toRdd

转换是通过Encoder将数据转为InternalRow,输出之前通过Decoder转换为泛型对象

DataFrame 是 Dataset 的一种特殊情况, 也就是说 DataFrame 是 Dataset[Row] 的别名 源码中可以看出来 可以理解为底层也是rdd

44fb917304a91eab99d131010448331b

dataset和dataframe区别

    处理对象  

  1. dataFrame处理的数据类型永远是row类型,dataset可以是任意类型
  2. dataframe只能做到运行时类型检查,dataset能做到编译和运行时都有类型检查
  3. dataframe只能通过表达式或列形式访问数据,可以当作是一张表,dataset针对的是整个对象的操作
  4. 都支持sql和api操作  df.as方法装成ds

 

dataframe和rdd的区别

  1. dataframe引入schema 而Rdd没有schema信息 
  2. rdd何以处理结构化和非结构化数据,dataframe一般处理结构化和板结构化数据
  3. rdd针对的是一个对象,dataframe针对的是列数据
  4. rdd运行在jvm 会频繁的创建销毁对象,GC压力大 。dataframe引入off-heap内存 gc压力小
  5. rdd是编译时类型安全的,dataframe是编译时类型不安全的
  6. rdd序列化性能消耗大,需要序列化数据和数据类型,dataframe只需要序列化数据即可 ;
  7. datafram有自动优化机制

rdd的运行步骤可以大致理解为 :先将rdd解析为有stage组成的DAG,后将stage转为Task直接运行。

因为任务是按照代码所示运行,运行效率高低依赖开发者的优化水平;

spark-sql并不是直接生成执行计划交给集群执行,而经过一个Catalyst的优化器优化后再去执行;

dataSet集合了rdd和dataframe的优点

dataset和rdd一样是强类型的,编译类型安全检查,也有dataframe的查询优化特性

使用off-heap gc压力小

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值