在 PySpark DataFrame 中刪除包含特定值的行


當我們處理複雜資料集時,我們需要能夠快速處理資料並提供結果的框架。這就是 PySpark 出現的原因。PySpark 是 Apache 社群開發的一個工具,用於即時處理資料。它是一個 API,用於建立 DataFrame 並解釋我們本地 Python 環境中的結果。

DataFrame 可以包含大量資訊/資料,為了保持要解釋的資料的相關性,我們進行必要的更改。在本文中,我們將操作 PySpark DataFrame 並刪除包含特定值的行。這種選擇性刪除資料的操作非常簡單,並且可以證明具有極其重要的意義。

準備資料集以建立 PySpark DataFrame

在開始刪除行之前,我們應該準備一個適當的資料集。藉助此資料集,我們將建立一個 DataFrame。

示例

我們從“pyspark.sql”中匯入了SparkSession。此 SparkSession 充當 Apache Spark 的入口點。此會話管理框架的配置。

我們使用構建器方法建立了一個名為“sparlOBJ”的“SparkSession”物件。提供應用程式名稱不是強制步驟,但它可以幫助程式設計師找到特定的會話。

我們傳遞了一個包含 6 個數字序列的資料集。我們傳遞了一個列標籤列表。我們使用了“SparkSession”例項和“createDataFrame”方法來建立一個“PySpark”DataFrame。

資料集和列名列表作為此方法的引數傳遞,最後我們列印了 DataFrame。

from pyspark.sql import SparkSession

sparkOBJ = SparkSession.builder.appName("SPARK_DSC").getOrCreate()

dataset = [("23", "25", "18", "19"), ("18", "25", "28", "40"),
           ("15", "18", "45", "11"), ("12", "8", "18", "28"),
           ("25", "42", "18", "29"), ("45", "50", "17", "11")]
columnsLis = ["Sequence 1", "Sequence 2", "Sequence 3", "Sequence 4"]

dataframe_SPK = sparkOBJ.createDataFrame(dataset, columnsLis)
print("the original data frame is: -")
dataframe_SPK.show()

輸出

the original data frame is: -
+----------+----------+----------+----------+
|Sequence 1|Sequence 2|Sequence 3|Sequence 4|
+----------+----------+----------+----------+
|        23|        25|        18|        19|
|        18|        25|        28|        40|
|        15|        18|        45|        11|
|        12|         8|        18|        28|
|        25|        42|        18|        29|
|        45|        50|        17|        11|
+----------+----------+----------+----------+

現在我們已經成功準備了一個 DataFrame,讓我們刪除包含特定值的某些行。我們將首先針對單個列。

使用 filter() 函式刪除具有值的行

此函式根據傳遞的條件過濾資料。條件驅動函式的邏輯並指定“要過濾的內容”和“不要過濾的內容”。我們將使用此函式來定位列下的特定值。

示例

在下面的示例中,我們使用了filter()函式來過濾包含值“18”的行。它將只針對“Sequence 1”列下的值。

新的 DataFrame 僅包含“Sequence 1”不等於“18”的行。包含此值的整行已從 DataFrame 中刪除。

from pyspark.sql import SparkSession
sparkOBJ = SparkSession.builder.appName("SPARK_DSC").getOrCreate()
dataset = [("23", "25", "18", "19"), ("18", "25", "28", "40"),
           ("15", "18", "45", "11"), ("12", "8", "18", "28"),
           ("25", "42", "18", "29"), ("45", "50", "17", "11")]
columnsLis = ["Sequence 1", "Sequence 2", "Sequence 3", "Sequence 4"]

dataframe_SPK = sparkOBJ.createDataFrame(dataset, columnsLis)
print("the original data frame is: -")
dataframe_SPK.show()
dataframe_SPK.filter(dataframe_SPK["Sequence 1"] != "18").show()

輸出

the original data frame is: -
+----------+----------+----------+----------+
|Sequence 1|Sequence 2|Sequence 3|Sequence 4|
+----------+----------+----------+----------+
|        23|        25|        18|        19|
|        18|        25|        28|        40|
|        15|        18|        45|        11|
|        12|         8|        18|        28|
|        25|        42|        18|        29|
|        45|        50|        17|        11|
+----------+----------+----------+----------+

+----------+----------+----------+----------+
|Sequence 1|Sequence 2|Sequence 3|Sequence 4|
+----------+----------+----------+----------+
|        23|        25|        18|        19|
|        15|        18|        45|        11|
|        12|         8|        18|        28|
|        25|        42|        18|        29|
|        45|        50|        17|        11|
+----------+----------+----------+----------+

使用 where() 函式刪除行

我們可以藉助“where()”函式執行類似的操作。此函式也圍繞特定條件工作。如果條件為“true”,我們將生成一個新的 DataFrame。讓我們看看它的實現。

示例

dataframe_SPK.where(dataframe_SPK["Sequence 1"] != "18").show()

輸出

+----------+----------+----------+----------+
|Sequence 1|Sequence 2|Sequence 3|Sequence 4|
+----------+----------+----------+----------+
|        23|        25|        18|        19|
|        15|        18|        45|        11|
|        12|         8|        18|        28|
|        25|        42|        18|        29|
|        45|        50|        17|        11|
+----------+----------+----------+----------+

在這裡,“where()”函式的行為與“filter()”函式完全相同。即使語法也相同。這兩種方法可以輕鬆地編織條件並根據它刪除行。這些函式也可以應用於多個列,並且可以過濾更多資料。

示例

dataframe_SPK.filter((dataframe_SPK["Sequence 1"] != "18") & 
(dataframe_SPK["Sequence 2"] != "18")
                    & (dataframe_SPK["Sequence 3"] != "18") & 
(dataframe_SPK["Sequence 4"] != "18")).show()

但是,首先分析 DataFrame 然後選擇相關資訊非常重要。

結論

本文重點介紹“PySpark”DataFrame 的基礎知識。我們討論了刪除包含特定資料的行的不同方法。我們使用了filter()函式和where()函式並建立了刪除行的條件。從 DataFrame 中刪除資料是一個關鍵步驟,應該謹慎進行。

更新於: 2023年5月5日

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.