一文讀懂 PySpark 數據框

2021-03-02 Python開發者

(點擊上方公眾號,可快速關注)

編譯:數據派THU - 季洋,倪驍然,英文:Kislay Keshari

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


什麼是數據框?


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

 

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


為什麼我們需要數據框?


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

 

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

2. 大卸八塊

 

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

3. 數據源

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

4. 多語言支持

 

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

數據框的特點

 

數據框實際上是分布式的,這使得它成為一種具有容錯能力和高可用性的數據結構。

惰性求值是一種計算策略,只有在使用值的時候才對表達式進行計算,避免了重複計算。Spark的惰性求值意味著其執行只能被某種行為被觸發。在Spark中,惰性求值在數據轉換發生時。

數據框實際上是不可變。由於不可變,意味著它作為對象一旦被創建其狀態就不能被改變。但是我們可以應用某些轉換方法來轉換它的值,如對RDD(Resilient Distributed Dataset)的轉換。

數據框的數據源


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

 

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

創建數據框


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

我們將創建 Employee 和 Department 實例:

 

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

 

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

 


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


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

 

1. 從CSV文件中讀取數據


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

spark.read.format[csv/json]


2. 數據框結構


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

 


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


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


4. 描述指定列


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


5. 查詢多列


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

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



7. 過濾數據


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


8. 過濾數據(多參數)


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


9. 數據排序 (OrderBy)


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


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

 

1. 加載數據


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


2. 篩選數據


3. 分組數據


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

4. 執行SQL查詢


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

到這裡,我們的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技能

相關焦點

  • 獨家 | 一文讀懂PySpark數據框(附實例)
    本文中我們將探討數據框的概念,以及它們如何與PySpark一起幫助數據分析員來解讀大數據集。 數據框是現代行業的流行詞。人們往往會在一些流行的數據分析語言中用到它,如Python、Scala、以及R。 那麼,為什麼每個人都經常用到它呢?讓我們通過PySpark數據框教程來看看原因。
  • 數據分析工具篇——pyspark應用詳解
    和spark,從離線和實時解決了大數據分析過程中遇到的大部分問題,但是這是否是就代表了大數據計算引擎?不是的~現階段流批一體盛行,Flink也逐漸進入大家的視野,大有發展壯大的趨勢,我們後面會單獨講解這一工具,這篇文章我們重點講解一下基於spark運算的pyspark工具。pyspark不是所有的代碼都在spark環境應用,可以將一些主要的運算單元切到spark環境運算完成,然後輸出運算結果到本地,最後在本地運行一些簡單的數據處理邏輯。
  • Pyspark推薦算法實戰(一)
    首先看下pyspark的算法包內容,pyspark算法包主要有ml和mllib兩個庫,這兩個庫從圖一看到,整體內容基本一致,都能滿足我們日常的算法需求,不過從2.0開始,mllib主要進行維護狀況,不再新增功能,加上ml庫與scikit-learn使用非常類似,對於經常使用後者建模的同學來說,ml能夠非常快速入手,建議更多時候使用ml算法包。
  • pyspark操作MongoDB
    有幾點需要注意的:不要安裝最新的pyspark版本,請安裝`pip3 install pyspark==2.3.2`
  • 獨家 | 一文讀懂Adaboost
    【集成學習】系列往期回顧:獨家 | 一文讀懂集成學習(附學習資源) 參考資料:1. 李航.《統計學習方法》2. 周志華.《機器學習》3. 曹瑩,苗啟廣,劉家辰,高琳. AdaBoost 算法研究進展與展望.
  • 手把手教你用PySpark構建機器學習模型
    探索數據本文中用Python創建的機器學習模型,均使用同一個數據集。這個數據集來自美國國家糖尿病與消化與腎病研究所,分類目標是預測病人是否得了糖尿病(是/否)。數據集可以從Kaggle上下載:https://www.kaggle.com/uciml/pima-indians-diabetes-databasefrom pyspark.sql import SparkSessionspark = SparkSession.builder.appName('ml-diabetes').getOrCreate()df
  • 基於Pyspark的銷量預測
    此時產生的dayofweek_Vec是一個向量,在時序領域,統計特徵非常重要,比如mean,std,這些特徵是可以由sql來完成,但one_hot這類特徵使用sql可能乏力,於是可以藉助pyspark.ml中的特徵處理模塊,如果還是無法很好的處理特徵,便需要藉助numpy等使用spark自定義函數udf進行操作。
  • PySpark 之Spark DataFrame入門
    創建Spark DataFrame其實我的文章裡已經介紹了幾張創建DataFrame的方法,下面介紹下其它方式,Spark內置了多種數據格式的支持header=True)import pandas as pddf_pd=pd.read_csv("iris.csv")# import pyspark
  • PySpark 原理解析
    然而,在數據科學領域,Python 一直佔據比較重要的地位,仍然有大量的數據工程師在使用各類 Python 數據處理和科學計算的庫,例如 numpy、Pandas、scikit-learn 等。同時,Python 語言的入門門檻也顯著低於 Scala。為此,Spark 推出了 PySpark,在 Spark 框架上提供一套 Python 的接口,方便廣大數據科學家使用。
  • PySpark源碼解析,用Python調用高效Scala接口,搞定大規模數據分析
    然而,在數據科學領域,Python 一直佔據比較重要的地位,仍然有大量的數據工程師在使用各類 Python 數據處理和科學計算的庫,例如 numpy、Pandas、scikit-learn 等。同時,Python 語言的入門門檻也顯著低於 Scala。
  • PySpark工作原理
    原文作者:李海強,來自平安銀行零售大數據團隊Spark是一個開源的通用分布式計算框架,支持海量離線數據處理
  • 獨家 | 一文讀懂Hadoop(三):Mapreduce
    ,而Hadoop又是大數據環境的基礎,想入門大數據行業首先需要了解Hadoop的知識。讀者可以通過閱讀「一文讀懂Hadoop」系列文章,對Hadoop技術有個全面的了解,它涵蓋了Hadoop官網的所有知識點,並且通俗易懂,英文不好的讀者完全可以通過閱讀此篇文章了解Hadoop。
  • 一文讀懂磁傳感器(必須收藏)
    【點擊藍色標題,獲取文章】 >、一文讀懂接近傳感器 3、一文讀懂磁傳感器 4、一文讀懂流量傳感器
  • 一文讀懂電容傳感器
    藍色標題,獲取文章】 10、一文讀懂光纖傳感器 11、一文讀懂溫溼度傳感器 12
  • 開窗函數之累積和,PySpark,Pandas和SQL版實現
    累積和用以在某個相對穩定的數據序列中,檢測出開始發生異常的數據點。所謂異常的數據點,比如說,從這點開始,整個數列的平均值或者均方差開始發生改變,進而影響到整組數據的穩定。所以累積和最典型的應用是在「改變檢測」(Change Detection)中對參量變化的檢測。
  • PySpark源碼解析,教你用Python調用高效Scala接口,搞定大規模數據分析
    然而,在數據科學領域,Python 一直佔據比較重要的地位,仍然有大量的數據工程師在使用各類 Python 數據處理和科學計算的庫,例如 numpy、Pandas、scikit-learn 等。同時,Python 語言的入門門檻也顯著低於 Scala。為此,Spark 推出了 PySpark,在 Spark 框架上提供一套 Python 的接口,方便廣大數據科學家使用。
  • 一文讀懂「2020限塑令」!
    一文讀懂「2020限塑令」!06 16:58 來源:澎湃新聞·澎湃號·政務 一張圖讀懂限塑令新規
  • 一文讀懂CAN總線(三)
    點擊上方藍字關注我們在一文讀懂CAN總線(一)中我們介紹了標準CAN和擴展CAN以及CAN消息類型;在一文讀懂CAN總線(二)中為大家介紹了CAN總線的位填充機制、錯誤檢測和故障界定、網絡拓撲、終端匹配
  • 獨家 | PySpark和SparkSQL基礎:如何利用Python編程執行Spark(附代碼)
    import pandas as pdfrom pyspark.sql import SparkSessionfrom pyspark.context import SparkContextfrom pyspark.sql.functionsimport *from pyspark.sql.typesimport *from
  • Stata: 面板數據模型-一文讀懂
    所以,面板數據模型其實沒有你想像的那麼複雜!常見的數據形式有時間序列數據( Time series data ),截面數據( Cross-sectional data )和面板數據( Panel data )。從維度來看,時間序列數據和截面數據均為一維。面板數據可以看做為時間序列與截面混合數據,因此它是二維數據。