独家 | 一文读懂PySpark数据框(附实例)

640?wx_fmt=png

作者:Kislay Keshari 

翻译:季洋

校对:倪骁然

本文1900字,建议阅读8分钟

本文中我们将探讨数据框的概念,以及它们如何与PySpark一起帮助数据分析员来解读大数据集。

 

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


  • 什么是数据框?

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

  • 数据框的特点

  • PySpark数据框的数据源

  • 创建数据框

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


什么是数据框?


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

 

独家 | 一文读懂PySpark数据框(附实例)_第1张图片


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


为什么我们需要数据框?


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

 

独家 | 一文读懂PySpark数据框(附实例)_第2张图片


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


2. 大卸八块

 

独家 | 一文读懂PySpark数据框(附实例)_第3张图片


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


3. 数据源


独家 | 一文读懂PySpark数据框(附实例)_第4张图片


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


4. 多语言支持

 

独家 | 一文读懂PySpark数据框(附实例)_第5张图片


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


数据框的特点

 

独家 | 一文读懂PySpark数据框(附实例)_第6张图片


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

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

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


数据框的数据源


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

 

独家 | 一文读懂PySpark数据框(附实例)_第7张图片


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


创建数据框


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


我们将创建 Employee 和 Department 实例:

 独家 | 一文读懂PySpark数据框(附实例)_第8张图片


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

 

640?wx_fmt=png


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

 

640?wx_fmt=png


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


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

 

独家 | 一文读懂PySpark数据框(附实例)_第9张图片


1. 从CSV文件中读取数据


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


spark.read.format[csv/json]


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第10张图片


2. 数据框结构


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

 

640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第11张图片


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


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


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第12张图片

640?wx_fmt=png


4. 描述指定列


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


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第13张图片

独家 | 一文读懂PySpark数据框(附实例)_第14张图片


5. 查询多列


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


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第15张图片


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


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第16张图片


7. 过滤数据


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


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第17张图片


8. 过滤数据(多参数)


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


640?wx_fmt=png

640?wx_fmt=png


9. 数据排序 (OrderBy)


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


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第18张图片


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

 

独家 | 一文读懂PySpark数据框(附实例)_第19张图片


1. 加载数据


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


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第20张图片


2. 筛选数据


640?wx_fmt=png


3. 分组数据


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


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第21张图片


4. 执行SQL查询


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


640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第22张图片

640?wx_fmt=png

独家 | 一文读懂PySpark数据框(附实例)_第23张图片

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


译者简介

640?wx_fmt=png

季洋,苏州某IT公司技术总监,从业20年,现在主要负责Java项目的方案和管理工作。对大数据、数据挖掘和分析项目跃跃欲试却苦于没有机会和数据。目前正在摸索和学习中,也报了一些线上课程,希望对数据建模的应用场景有进一步的了解。不能成为巨人,只希望可以站在巨人的肩膀上了解数据科学这个有趣的世界。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。


点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。


640?wx_fmt=png640?wx_fmt=jpeg

点击“阅读原文”拥抱组织

你可能感兴趣的:(独家 | 一文读懂PySpark数据框(附实例))