spark基础之RDD和DataFrame和Dataset比较

本文介绍了SparkSQL的概念及其在结构化数据存储和操作中的应用,并对比了RDD、DataFrame及Dataset的特点与区别。

一 SparkSQL简介

Spark SQL是一个能够利用Spark进行结构化数据的存储和操作的组件,结构化数据可以来自外部结构化数据源也可以通过RDD获取。

外部的结构化数据源包括Hive,JSON,Parquet,RMDBS等。当前Spark SQL使用Catalyst优化器来对SQL进行优化,从而得到更加高效的执行方案。并且可以将结果存储到外部系统。

 

二 DataFrame & Dataset介绍

2.1DataFrame 介绍

DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据块中的表,它与RDD最主要的区别在于:DataFrame有schema元数据,即DataFrame所表示的数据集的每一列都有名称和数据类型。正是因为有了这些schema元数据,Sparl SQL的查询优化器就可以进行针对性的优化

 

2.2 Dataset介绍

Dataset也是一种分布式数据集,可以使用map,flatmap等函数进行转换,DataFrame是一个Dataset的特例,等价于Dataset[Row]; Dataset的操作分为transformation和action 两种,transformation用于创建新的Dataset,而action用于计算操作;它和RDD一样具有惰性,只有action操作被调用的时候才会进行计算;DataSet创立需要一个显式的Encoder,把对象序列化为二进制

 

三 RDD、DataFrame、Dataset之间的比较

3.1 相同点

#  RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集

# 三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行。只有在执行action操作的时候,才会进行计算。

 

3.2 不同点

3.2.1 RDD和 DataFrame的比较

# 前者没有schema信息;后者有schema信息

# RDD无法得知所存的数据元素的具体内部结构,Spark Core只能在stage层面进行简单的优化;后者因为有schema信息,Sparl SQL的查询优化器就可以进行针对性的优化

# RDD通过函数式调用API,虽然简洁明了,但是需要创建新的对象,不容易重用旧的对象,给GC带来挑战;DataFrame是尽可能的重用对象

 

3.2.2 DataFrame和 Dataset的比较

# DataFrame是带有类型的,即需要指定类型;但是DataFrame无需指定类型。DataFrame是一个Dataset的特例,等价于Dataset[Row]

# DataFrame带有schema,而DataSet没有schema

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值