DataFrame简介

dataframe是什么

DataFrame实质上是存储在不同节点计算机中的一张关系型数据表。分布式存储最大的好处是:可以让数据在不同的工作节点上并行存储,以便在需要数据的时候并行运算。

dataframe与RDD的关系

RDD是一种分布式弹性数据集,将数据分布存储在不同节点的计算机内存中进行存储和处理。每次RDD对数据处理的最终结果都分布存放在不同的节点中。
节点中。Resilient 是弹性的意思,在Spark中指的是数据的存储)方式,即数据在节点中进行存储时候既可以使用内存也可以使用磁盘.这为使用者提供了很大的自由,提供了不同的持久化和运行方法,是.种有 容错机制的特殊数据集合。RDD可以说是DataFrame的前身,DataFrame 是RDD的发展和拓展。RDD中可以存储任何单机汇美型的最积,但是我我使用D在手段用求明显时在理 子难以整用的缺中的视)
假设RDD存的数据是一个 Person类型的数据,现在要求出所有年龄段(10年个年龄段)中最高的身高与最大的体重、使用RDD核口时,因为RDD不了解其中在储的数据的可体销构、需要用户自己去写个很特殊化的聚 合函数来完成这样的功能。那么如何改进才可以让RDD了解其中存储的数据包含哪些列并在列上进行操作呢?
根据谷歌上的解释,DatFamne是表格或维数组状结构, 其中每列包含对个变量的度量,每一行包含一个案例,类似于关系型数据库中的表或者R/Python中的dataframe,可以说是一个具有良好优化技术的关系表。有了DataFrame,框架会了解RDD中的数据具有什么样的结构和类型,使用者可以说清楚自己对每列进行什 么样的操作,这样就有可能实现个算子, 用在多列上比较容易进行算子的复用。甚至,在需要同时求出每个年龄段内不同的姓氏有多少个的时候使用RDD接口,在之前的函数需要很大的改动才能满足需求时使用DataFrame接口,这时只需要添加对这一列的处理,原来的max/min相关列的处理都可保持不变。在Apache Spark里,DataFrame 优于RDD,但也包含了RDD的特性。RDD和DataFrame的共同特征是不可变性、内存运行、弹性、分布式计算能力,即DataFrame = RDD[Row] +shcema。

dataframe理解及特性

dataframe工作原理

DataFrame可以看成个分 布在不同节点中的分布式数据集,并将数据以数据块(Block)的形式存储在各个节点的计算机中,整体布局如图所示。DataFrame主要用于进行结构化数据的处理,提供种基于 RDD之上的全新概念,但是底层还是基于RDD的,因此这一部分基本上和RDD是样的。
在这里插入图片描述
从图3-2可以看出,每个BlockMaster管理着若干个BlockSlave,而每个BlockSlave又管理着若千个BlockNode。当BlockSlave获得了每个Node节点的地址时,又反向BlockMaster注册每个Node的基本信息,这样会形成分层管理。
对于某个节点中存储的数据,如果使用频率较多,BlockMaster 就会将其缓存在自己的内存中,如果以后需要调用这些数据,就可以直接从BlockMaster中读取。对于不再使用的数据,BlcokMaster会向BlockSlave发送一组命令予以销毁。
对于DataFrame来说,它有一个比RDD好的地方,就是可以使用对外内存,使内存的使用不会过载,比RDD有更好的执行性能。

宽依赖与窄依赖

宽依赖(wide dependency, 也称shufle dependency) 与窄依赖(narrow dependency) 是Spark计算引擎划分Stage的根源所在,遇到宽依赖就划分为多个Stage,并针对每个Stage提交一个TaskSet。这两个概念对于理解Spark的底层原理非常重要,所以需要好好理解它们。
注意,Transformation在生成RDD的时候,生成的是多个RDD,但不是同时一次性生成的,而是由上一级的RDD依次往下生成,我们将其称为依赖。
RDD依赖生成的方式不尽相同,在实际工作中般由两种方式生成: 宽依赖和窄依赖,两者的区别如图所示:
在这里插入图片描述
RDD作为一个数据集合,可以在数据集之间逐次生成。如果每个RDD的子RDD只有个父RDD,而同时父RDD也只有一个子RDD时,那么这种生成关系称为窄依赖,如窄依赖的矩形框里所示。如果多个RDD相互生成,就称为宽依赖,如宽依赖的矩形框里所示。
宽依赖和窄依赖在实际应用中有着不同的作用。窄依赖便于在单一节点上按次序执行任务,使任务可控。宽依赖更多的是考虑任务的交互和容错性。这里没有好坏之分,具体选择哪种方式需要根据具体情况处理。宽依赖往往对应着shufle (模拟扑克牌中的洗牌操作)操作,需要在运行过程中将同一个父RDD的分区传入不同的子RDD分区中,中间可能涉及多个节点之间的数据传输;窄依赖的每个父RDD的分区只会传入一个子RDD分区中,通常可以在一个节点内完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值