在 PySpark DataFrame 中根據條件刪除行


對資料幀應用條件對於程式設計師來說非常有用。我們可以驗證資料以確保它符合我們的模型。我們可以透過應用條件來操作資料幀並過濾掉資料幀中不相關的資料,從而改進資料視覺化。在本文中,我們將執行類似的操作,即對 PySpark 資料幀應用條件並從中刪除行。Pyspark 提供即時資料處理。它是 Apache Spark 的一個 API,允許程式設計師在本地 Python 環境中建立 Spark 框架。

示例

現在我們已經對 PySpark 資料幀有了基本的瞭解,讓我們建立一個。這裡,

  • 我們從 “spark.sql” 中匯入了 “SparkSession”。此會話充當使用 “Spark API” 的入口點,並允許我們根據自己的意願配置資料幀。我們只為一個應用程式建立一個 SparkSession,然後在整個程式碼庫中使用它。

  • 我們傳遞了一個包含有關菜餚資訊(包括名稱、價格、評分和折扣)的字典資料集。我們使用該資料集建立了一個 Pandas 資料幀。

  • 然後將 Pandas 資料幀作為 “.createDataFrame” 方法的引數傳遞,以建立 Spark 資料幀。

  • 最後,我們使用 “show()” 方法顯示了資料幀。

from pyspark.sql import SparkSession
import pandas as pd

sparkOBJ = SparkSession.builder.appName("DscSpark").getOrCreate()
dataset = {"Dish name": ["Biryani", "Fish", "Mashed potatoes", "Salad"], "Price": [250, 350, 180, 200], "Rating":[9, 7, 8, 6], "discount %":[20, 30, 10, 15]}

dataframe_pd = pd.DataFrame(dataset, index=[1, 2, 3, 4])

dataframe_spk = sparkOBJ.createDataFrame(dataframe_pd)
print("The original data frame is: -")
dataframe_spk.show()

輸出

The original data frame is: -
+---------------+-----+------+----------+
|      Dish name|Price|Rating|discount %|
+---------------+-----+------+----------+
|        Biryani|  250|     9|        20|
|           Fish|  350|     7|        30|
|Mashed potatoes|  180|     8|        10|
|          Salad|  200|     6|        15|
+---------------+-----+------+----------+

現在我們已經建立了一個 Spark 資料幀,我們將對其列應用條件以從中刪除行。

對單個列應用條件

我們將從一個簡單的針對單個列的任務開始。讓我們在這裡構建程式碼,

  • 在建立資料幀後,我們使用 “filter()” 函式刪除 “Rating” 列值大於 8 的行。

  • 保留了第 3 行和第 4 行。

  • 我們建立了一個新的資料幀來儲存對原始資料幀所做的更改。

示例

from pyspark.sql import SparkSession
import pandas as pd

sparkOBJ = SparkSession.builder.appName("DscSpark").getOrCreate()
dataset = {"Dish name": ["Biryani", "Fish", "Mashed potatoes", "Salad"], "Price": [250, 350, 180, 200],
           "Rating":[9, 7, 8, 6], "discount %":[20, 30, 10, 15]}

dataframe_pd = pd.DataFrame(dataset)

dataframe_spk = sparkOBJ.createDataFrame(dataframe_pd)
print("The original data frame is: -")
dataframe_spk.show()

dataframe_fil = dataframe_spk.filter(dataframe_spk.Rating < 8)
dataframe_fil.show()

輸出

The original data frame is: -
+---------------+-----+------+----------+
|      Dish name|Price|Rating|discount %|
+---------------+-----+------+----------+
|        Biryani|  250|     9|        20|
|           Fish|  350|     7|        30|
|Mashed potatoes|  180|     8|        10|
|          Salad|  200|     6|        15|
+---------------+-----+------+----------+

+--------+-----+------+----------+
|Dishname|Price|Rating|discount %|
+--------+-----+------+----------+
|    Fish|  350|     7|        30|
|   Salad|  200|     6|        15|
+--------+-----+------+----------+

對多列應用條件

為了提高資料幀的特定性和簡化資料分析,我們可以在資料幀的多個列上應用某些條件。這種方法透過從資料幀中消除不必要的行來提高資料處理效率。

我們將使用 “&” 運算子來定位多列,因為在 Spark 資料幀的情況下,表示式在所有行上逐元素計算。因此,我們需要一個 “逐元素邏輯運算子”。

示例

讓我們看看程式碼以更好地理解。

  • 在建立資料幀後,我們使用 filter() 函式刪除 “Rating” 列值小於 7 且 “Price” 列大於 300 的行。

  • 保留滿足條件的列對應的行,即“行 1”和“行 3”。

from pyspark.sql import SparkSession
import pandas as pd

sparkOBJ = SparkSession.builder.appName("DscSpark").getOrCreate()
dataset = {"Dish name": ["Biryani", "Fish", "Mashed potatoes", "Salad"], "Price": [250, 350, 180, 200], "Rating":[9, 7, 8, 6], "discount%":[20, 30, 10, 15]}

dataframe_pd = pd.DataFrame(dataset)

dataframe_spk = sparkOBJ.createDataFrame(dataframe_pd)
print("The original data frame is: -")
dataframe_spk.show()
dataframe_fil = dataframe_spk.filter((dataframe_spk.Rating > 7) & (dataframe_spk.Price < 300))
dataframe_fil.show()

輸出

The original data frame is: -
+---------------+-----+------+---------+
|      Dish name|Price|Rating|discount%|
+---------------+-----+------+---------+
|        Biryani|  250|     9|       20|
|           Fish|  350|     7|       30|
|Mashed potatoes|  180|     8|       10|
|          Salad|  200|     6|       15|
+---------------+-----+------+---------+

+--------+-----+------+---------+------+
|      Dish name|Price|Rating|discount%|
+--------+-----+------+---------+------+
|        Biryani|  250|     9|       20|
|Mashed potatoes|  180|     8|       10|
+--------+-----+------+---------+------+

結論

在本文中,我們討論了透過對列應用條件從 PySpark 資料幀中刪除行的不同方法。我們建立了一個數據幀,然後定位了一個單列。之後,我們對多列應用了條件並刪除了行。

更新於: 2023年5月5日

1K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.