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分区中,通常可以在一个节点内完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要按照行名对DataFrame进行排序,可以使用`sort_index()`方法。该方法会根据行索引的值对DataFrame进行排序,默认是按照升序排列。以下是一个示例代码: ```python import pandas as pd # 读取DataFrame df = pd.read_csv('data.csv', header=0) # 按照行名排序 df_sorted = df.sort_index() # 打印排序后的DataFrame print(df_sorted) ``` 在这个例子中,我们首先使用`read_csv()`函数读取了一个名为"data.csv"的文件,并将其存储在DataFrame变量`df`中。然后,我们使用`sort_index()`方法对DataFrame进行排序,并将排序后的结果存储在`df_sorted`中。最后,我们使用`print()`函数打印出排序后的DataFrame。 请注意,`sort_index()`方法默认按照升序对行索引进行排序。如果需要按照降序排序,可以使用`sort_index(ascending=False)`。 #### 引用[.reference_title] - *1* *3* [Dataframe的行名及列名排序](https://blog.csdn.net/qq_42769683/article/details/104560822)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python语言学习之pandas之DataFrameDataFrame简介、常用函数(如DataFrame重命名列名方法)等详细攻略 ](https://blog.csdn.net/weixin_39645308/article/details/110829637)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值