獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

翻譯:季洋

校對:倪驍然

本文約1900字,建議閱讀8分鐘。

本文中我們將探討數據框的概念,以及它們如何與PySpark一起幫助數據分析員來解讀大數據集。

數據框是現代行業的流行詞。人們往往會在一些流行的數據分析語言中用到它,如Python、Scala、以及R。 那麼,為什麼每個人都經常用到它呢?讓我們通過PySpark數據框教程來看看原因。在本文中,我將討論以下話題:

  • 什麼是數據框?
  • 為什麼我們需要數據框?
  • 數據框的特點
  • PySpark數據框的數據源
  • 創建數據框
  • PySpark數據框實例:國際足聯世界盃、超級英雄

什麼是數據框?

數據框廣義上是一種數據結構,本質上是一種表格。它是多行結構,每一行又包含了多個觀察項。同一行可以包含多種類型的數據格式(異質性),而同一列只能是同種類型的數據(同質性)。數據框通常除了數據本身還包含定義數據的元數據;比如,列和行的名字。

獨家|一文讀懂PySpark數據框(附實例)

我們可以說數據框不是別的,就只是一種類似於SQL表或電子表格的二維數據結構。接下來讓我們繼續理解到底為什麼需要PySpark數據框。

為什麼我們需要數據框?

1. 處理結構化和半結構化數據

獨家|一文讀懂PySpark數據框(附實例)

數據框被設計出來就是用來處理大批量的結構化或半結構化的數據。各觀察項在Spark數據框中被安排在各命名列下,這樣的設計幫助Apache Spark瞭解數據框的結構,同時也幫助Spark優化數據框的查詢算法。它還可以處理PB量級的數據。

2. 大卸八塊

獨家|一文讀懂PySpark數據框(附實例)

數據框的應用編程接口(API)支持對數據“大卸八塊”的方法,包括通過名字或位置“查詢”行、列和單元格,過濾行,等等。統計數據通常都是很凌亂複雜同時又有很多缺失或錯誤的值和超出常規範圍的數據。因此數據框的一個極其重要的特點就是直觀地管理缺失數據。

3. 數據源

獨家|一文讀懂PySpark數據框(附實例)

數據框支持各種各樣地數據格式和數據源,這一點我們將在PySpark數據框教程的後繼內容中做深入的研究。它們可以從不同類的數據源中導入數據。

4. 多語言支持

獨家|一文讀懂PySpark數據框(附實例)

它為不同的程序語言提供了API支持,如Python、R、Scala、Java,如此一來,它將很容易地被不同編程背景的人們使用。

數據框的特點

獨家|一文讀懂PySpark數據框(附實例)

  • 數據框實際上是分佈式的,這使得它成為一種具有容錯能力和高可用性的數據結構。
  • 惰性求值是一種計算策略,只有在使用值的時候才對表達式進行計算,避免了重複計算。Spark的惰性求值意味著其執行只能被某種行為被觸發。在Spark中,惰性求值在數據轉換髮生時。
  • 數據框實際上是不可變的。由於不可變,意味著它作為對象一旦被創建其狀態就不能被改變。但是我們可以應用某些轉換方法來轉換它的值,如對RDD(Resilient Distributed Dataset)的轉換。

數據框的數據源

在PySpark中有多種方法可以創建數據框:

獨家|一文讀懂PySpark數據框(附實例)

可以從任一CSV、JSON、XML,或Parquet文件中加載數據。還可以通過已有的RDD或任何其它數據庫創建數據,如HiveCassandra。它還可以從HDFS或本地文件系統中加載數據。

創建數據框

讓我們繼續這個PySpark數據框教程去了解怎樣創建數據框。

我們將創建 Employee 和 Department 實例:

獨家|一文讀懂PySpark數據框(附實例)

接下來,讓我們通過Employee和Departments創建一個DepartmentWithEmployees實例。

獨家|一文讀懂PySpark數據框(附實例)

讓我們用這些行來創建數據框對象:

獨家|一文讀懂PySpark數據框(附實例)

PySpark數據框實例1:國際足聯世界盃數據集

這裡我們採用了國際足聯世界盃參賽者的數據集。我們將會以CSV文件格式加載這個數據源到一個數據框對象中,然後我們將學習可以使用在這個數據框上的不同的數據轉換方法。

獨家|一文讀懂PySpark數據框(附實例)

1. 從CSV文件中讀取數據

讓我們從一個CSV文件中加載數據。這裡我們會用到spark.read.csv方法來將數據加載到一個DataFrame對象(fifa_df)中。代碼如下:

spark.read.format[csv/json]

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

2. 數據框結構

來看一下結構,亦即這個數據框對象的數據結構,我們將用到printSchema方法。這個方法將返回給我們這個數據框對象中的不同的列信息,包括每列的數據類型和其可為空值的限制條件。

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

3. 列名和個數(行和列)

當我們想看一下這個數據框對象的各列名、行數或列數時,我們用以下方法:

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

4. 描述指定列

如果我們要看一下數據框中某指定列的概要信息,我們會用describe方法。這個方法會提供我們指定列的統計概要信息,如果沒有指定列名,它會提供這個數據框對象的統計信息。

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

5. 查詢多列

如果我們要從數據框中查詢多個指定列,我們可以用select方法。

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

6. 查詢不重複的多列組合

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

7. 過濾數據

為了過濾數據,根據指定的條件,我們使用filter命令。 這裡我們的條件是Match ID等於1096,同時我們還要計算有多少記錄或行被篩選出來。

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

8. 過濾數據(多參數)

我們可以基於多個條件(AND或OR語法)篩選我們的數據:

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

9. 數據排序 (OrderBy)

我們使用OrderBy方法排序數據。Spark默認升序排列,但是我們也可以改變它成降序排列。

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

PySpark數據框實例2:超級英雄數據集

獨家|一文讀懂PySpark數據框(附實例)

1. 加載數據

這裡我們將用與上一個例子同樣的方法加載數據:

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

2. 篩選數據

獨家|一文讀懂PySpark數據框(附實例)

3. 分組數據

GroupBy 被用於基於指定列的數據框的分組。這裡,我們將要基於Race列對數據框進行分組,然後計算各分組的行數(使用count方法),如此我們可以找出某個特定種族的記錄數。

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

4. 執行SQL查詢

我們還可以直接將SQL查詢語句傳遞給數據框,為此我們需要通過使用registerTempTable方法從數據框上創建一張表,然後再使用sqlContext.sql()來傳遞SQL查詢語句。

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

獨家|一文讀懂PySpark數據框(附實例)

到這裡,我們的PySpark數據框教程就結束了。

我希望在這個PySpark數據框教程中,你們對PySpark數據框是什麼已經有了大概的瞭解,並知道了為什麼它會在行業中被使用以及它的特點。恭喜,你不再是數據框的新手啦!

原文標題:PySpark DataFrame Tutorial: Introduction to DataFrames

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

譯者簡介

獨家|一文讀懂PySpark數據框(附實例)

季洋,蘇州某IT公司技術總監,從業20年,現在主要負責Java項目的方案和管理工作。對大數據、數據挖掘和分析項目躍躍欲試卻苦於沒有機會和數據。目前正在摸索和學習中,也報了一些線上課程,希望對數據建模的應用場景有進一步的瞭解。不能成為巨人,只希望可以站在巨人的肩膀上了解數據科學這個有趣的世界。

運營人員:冉小山


分享到:


相關文章: