前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据入门:Spark RDD、DataFrame、DataSet

大数据入门:Spark RDD、DataFrame、DataSet

作者头像
成都加米谷大数据
修改2020-12-15 18:14:36
1.8K0
修改2020-12-15 18:14:36
举报
文章被收录于专栏:大数据开发大数据开发

在Spark的学习当中,RDD、DataFrame、DataSet可以说都是需要着重理解的专业名词概念。尤其是在涉及到数据结构的部分,理解清楚这三者的共性与区别,非常有必要。今天的大数据入门分享,我们就主要来讲讲Spark RDD、DataFrame、DataSet。

大数据培训:Spark RDD、DataFrame、DataSet
大数据培训:Spark RDD、DataFrame、DataSet

RDD,作为Spark的核心数据抽象,是Spark当中不可或缺的存在,而在SparkSQL中,Spark为我们提供了两个新的抽象,分别是DataFrame和DataSet。

DataFrame、DataSet和RDD有什么区别?

首先从版本的产生上来看:

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

如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不同是的他们的执行效率和执行方式。

在后期的Spark版本中,DataSet会逐步取代RDD和DataFrame成为唯一的API接口。

RDD、DataFrame、DataSet三者的共性

RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利。

三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action如foreach时,三者才会开始遍历运算。

三者都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出。

三者都有partition的概念。

三者有许多共同的函数,如filter,排序等。

Spark RDD、DataFrame、DataSet
Spark RDD、DataFrame、DataSet

RDD、DataFrame、DataSet三者的区别

RDD:

RDD一般和spark mlib同时使用。

RDD不支持sparksql操作。

DataFrame:

①与RDD和Dataset不同,DataFrame每一行的类型固定为Row,只有通过解析才能获取各个字段的值。

②DataFrame引入了schema和off-heap

schema:RDD每一行的数据,结构都是一样的。这个结构就存储在schema中。Spark通过schame就能够读懂数据,因此在通信和IO时就只需要序列化和反序列化数据,而结构的部分就可以省略了。

off-heap:意味着JVM堆以外的内存,这些内存直接受操作系统管理(而不是JVM)。Spark能够以二进制的形式序列化数据(不包括结构)到off-heap中,当要操作数据时,就直接操作off-heap内存。由于Spark理解schema,所以知道该如何操作。

off-heap就像地盘,schema就像地图,Spark有地图又有自己地盘了,就可以自己说了算了,不再受JVM的限制,也就不再收GC的困扰了。

③结构化数据处理非常方便,支持Avro,CSV,Elasticsearch数据等,也支持Hive,MySQL等传统数据表。

④兼容Hive,支持Hql、UDF

有schema和off-heap概念,DataFrame解决了RDD的缺点,但是却丢了RDD的优点。DataFrame不是类型安全的(只有编译后才能知道类型错误),API也不是面向对象风格的。

大数据培训:Spark RDD、DataFrame、DataSet
大数据培训:Spark RDD、DataFrame、DataSet

Dataset:

①DataSet集中了RDD的优点(强类型和可以用强大lambda函数)以及Spark SQL优化的执行引擎。DataSet可以通过JVM的对象进行构建,可以用函数式的转换(map/flatmap/filter)进行多种操作。

②DataSet结合了RDD和DataFrame的优点,并带来的一个新的概念Encoder。DataSet通过Encoder实现了自定义的序列化格式,使得某些操作可以在无需序列化情况下进行。另外Dataset还进行了包括Tungsten优化在内的很多性能方面的优化。

③Dataset<Row>等同于DataFrame(Spark 2.X)

RDD与DataFrame之间的互相转换

Spark SQL支持两种RDDs转换为DataFrames的方式:

①使用反射获取RDD内的Schema。当已知类的Schema的时候,使用这种基于反射的方法会让代码更加简洁而且效果也很好。

②通过编程接口指定Schema。通过Spark SQL的接口创建RDD的Schema,这种方式会让代码比较冗长。这种方法的好处是,在运行时才知道数据的列以及列的类型的情况下,可以动态生成Schema。

关于大数据入门,Spark RDD、DataFrame、DataSet,以上就为几个重要的概念作了基本的介绍了。Spark当中,从RDD到Dataframe、Dataset,其实是一个渐进发展的过程,由易到难会非常好上手。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DataFrame、DataSet和RDD有什么区别?
  • RDD、DataFrame、DataSet三者的共性
  • RDD、DataFrame、DataSet三者的区别
  • RDD与DataFrame之间的互相转换
相关产品与服务
大数据处理套件 TBDS
腾讯大数据处理套件(Tencent Big Data Suite,TBDS)依托腾讯多年海量数据处理经验,基于云原生技术和泛 Hadoop 生态开源技术提供的可靠、安全、易用的大数据处理平台。 TBDS可在公有云、私有云、非云化环境,根据不同数据处理需求组合合适的存算分析组件,包括 Hive、Spark、HBase、Flink、Presto、Iceberg、Elasticsearch、StarRocks 等,以快速构建企业级数据湖仓。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档