一文读懂 PySpark 数据框

(点击上方公众号,可快速关注)


编译:数据派THU - 季洋,倪骁然,英文:Kislay Keshari


数据框是现代行业的流行词。人们往往会在一些流行的数据分析语言中用到它,如Python、Scala、以及R。 那么,为什么每个人都经常用到它呢?让我们通过PySpark数据框教程来看看原因。在本文中,我将讨论以下话题:


  • 什么是数据框?

  • 为什么我们需要数据框?

  • 数据框的特点

  • PySpark数据框的数据源

  • 创建数据框

  • PySpark数据框实例:国际足联世界杯、超级英雄


什么是数据框?


数据框广义上是一种数据结构,本质上是一种表格。它是多行结构,每一行又包含了多个观察项。同一行可以包含多种类型的数据格式(异质性),而同一列只能是同种类型的数据(同质性)。数据框通常除了数据本身还包含定义数据的元数据;比如,列和行的名字。

 

640?wx_fmt=png


我们可以说数据框不是别的,就只是一种类似于SQL表或电子表格的二维数据结构。接下来让我们继续理解到底为什么需要PySpark数据框。


为什么我们需要数据框?


1. 处理结构化和半结构化数据

 

640?wx_fmt=png


数据框被设计出来就是用来处理大批量的结构化或半结构化的数据。各观察项在Spark数据框中被安排在各命名列下,这样的设计帮助Apache Spark了解数据框的结构,同时也帮助Spark优化数据框的查询算法。它还可以处理PB量级的数据。


2. 大卸八块

 

640?wx_fmt=png


数据框的应用编程接口(API)支持对数据“大卸八块”的方法,包括通过名字或位置“查询”行、列和单元格,过滤行,等等。统计数据通常都是很凌乱复杂同时又有很多缺失或错误的值和超出常规范围的数据。因此数据框的一个极其重要的特点就是直观地管理缺失数据。


3. 数据源


640?wx_fmt=jpeg


数据框支持各种各样地数据格式和数据源,这一点我们将在PySpark数据框教程的后继内容中做深入的研究。它们可以从不同类的数据源中导入数据。


4. 多语言支持

 

640?wx_fmt=jpeg


它为不同的程序语言提供了API支持,如Python、R、Scala、Java,如此一来,它将很容易地被不同编程背景的人们使用。


数据框的特点

 

640?wx_fmt=png


  • 数据框实际上是分布式的,这使得它成为一种具有容错能力和高可用性的数据结构。

  • 惰性求值是一种计算策略,只有在使用值的时候才对表达式进行计算,避免了重复计算。Spark的惰性求值意味着其执行只能被某种行为被触发。在Spark中,惰性求值在数据转换发生时。

  • 数据框实际上是不可变。由于不可变,意味着它作为对象一旦被创建其状态就不能被改变。但是我们可以应用某些转换方法来转换它的值,如对RDD(Resilient Distributed Dataset)的转换。


数据框的数据源


在PySpark中有多种方法可以创建数据框:

 

640?wx_fmt=png


可以从任一CSV、JSON、XML,或Parquet文件中加载数据。还可以通过已有的RDD或任何其它数据库创建数据,如HiveCassandra。它还可以从HDFS或本地文件系统中加载数据。


创建数据框


让我们继续这个PySpark数据框教程去了解怎样创建数据框。


我们将创建 Employee 和 Department 实例:

 640?wx_fmt=png


接下来,让我们通过EmployeeDepartments创建一个DepartmentWithEmployees实例。

 

640?wx_fmt=png


让我们用这些行来创建数据框对象:

 

640?wx_fmt=png


PySpark数据框实例1:国际足联世界杯数据集


这里我们采用了国际足联世界杯参赛者的数据集。我们将会以CSV文件格式加载这个数据源到一个数据框对象中,然后我们将学习可以使用在这个数据框上的不同的数据转换方法。

 

640?wx_fmt=png


1. 从CSV文件中读取数据


让我们从一个CSV文件中加载数据。这里我们会用到spark.read.csv方法来将数据加载到一个DataFrame对象(fifa_df)中。代码如下:


spark.read.format[csv/json]


640?wx_fmt=png

640?wx_fmt=png


2. 数据框结构


来看一下结构,亦即这个数据框对象的数据结构,我们将用到printSchema方法。这个方法将返回给我们这个数据框对象中的不同的列信息,包括每列的数据类型和其可为空值的限制条件。

 

640?wx_fmt=png

640?wx_fmt=jpeg


3. 列名和个数(行和列)


当我们想看一下这个数据框对象的各列名、行数或列数时,我们用以下方法:


640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


4. 描述指定列


如果我们要看一下数据框中某指定列的概要信息,我们会用describe方法。这个方法会提供我们指定列的统计概要信息,如果没有指定列名,它会提供这个数据框对象的统计信息。


640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


5. 查询多列


如果我们要从数据框中查询多个指定列,我们可以用select方法。


640?wx_fmt=png

640?wx_fmt=jpeg


6. 查询不重复的多列组合


640?wx_fmt=png

640?wx_fmt=png


7. 过滤数据


为了过滤数据,根据指定的条件,我们使用filter命令。 这里我们的条件是Match ID等于1096,同时我们还要计算有多少记录或行被筛选出来。


640?wx_fmt=png

640?wx_fmt=png


8. 过滤数据(多参数)


我们可以基于多个条件(AND或OR语法)筛选我们的数据:


640?wx_fmt=png

640?wx_fmt=png


9. 数据排序 (OrderBy)


我们使用OrderBy方法排序数据。Spark默认升序排列,但是我们也可以改变它成降序排列。


640?wx_fmt=png

640?wx_fmt=png


PySpark数据框实例2:超级英雄数据集

 

640?wx_fmt=png


1. 加载数据


这里我们将用与上一个例子同样的方法加载数据:


640?wx_fmt=png

640?wx_fmt=png


2. 筛选数据


640?wx_fmt=png


3. 分组数据


GroupBy 被用于基于指定列的数据框的分组。这里,我们将要基于Race列对数据框进行分组,然后计算各分组的行数(使用count方法),如此我们可以找出某个特定种族的记录数。


640?wx_fmt=png

640?wx_fmt=png


4. 执行SQL查询


我们还可以直接将SQL查询语句传递给数据框,为此我们需要通过使用registerTempTable方法从数据框上创建一张表,然后再使用sqlContext.sql()来传递SQL查询语句。


640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


到这里,我们的PySpark数据框教程就结束了。


我希望在这个PySpark数据框教程中,你们对PySpark数据框是什么已经有了大概的了解,并知道了为什么它会在行业中被使用以及它的特点。恭喜,你不再是数据框的新手啦!


原文标题:PySpark DataFrame Tutorial: Introduction to DataFrames

原文链接:https://dzone.com/articles/pyspark-dataframe-tutorial-introduction-to-datafra



【关于投稿】


如果大家有原创好文投稿,请直接给公号发送留言。


① 留言格式:
【投稿】+《 文章标题》+ 文章链接

② 示例:
【投稿】《不要自称是程序员,我十多年的 IT 职场总结》:

http://blog.jobbole.com/94148/


③ 最后请附上您的个人简介哈~


看完本文有收获?请转发分享给更多人

关注「Python开发者」,提升Python技能

640?wx_fmt=png

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值