從PySpark DataFrame中刪除一列或多列


PySpark DataFrame是一個功能強大的即時資料處理框架,由Apache Spark開發者開發。Spark最初是用“Scala”程式語言編寫的,為了擴大其影響力和靈活性,構建了多個API。這些API提供了一個介面,可用於在本地環境中執行Spark應用程式。

PySpark就是這樣一種API,它是為Python環境開發的。PySpark DataFrame也包含行和列,但處理方式不同,因為它使用系統內(RAM)計算技術來處理資料。

在本文中,我們將學習並理解從PySpark DataFrame中刪除單列和多列的基本操作。首先,我們將建立一個參考DataFrame。

建立PySpark DataFrame

我們必須建立一個**SparkSession**,它處理DataFrame的配置部分。SparkSession充當訪問Spark API的入口點。我們建立一個SparkSession物件,它處理叢集管理器和框架的功能。

我們可以使用此物件讀取資料集並準備DataFrame。通常,我們需要一個“**模式(schema)**”來生成DataFrame,但僅靠資料集也可以構建PySpark DataFrame。讓我們建立一個DataFrame並增強我們的理解。

示例

  • 我們匯入了pandas庫,並使用pyspark庫匯入了**SparkSession**。

  • 我們使用“**builder**”方法為SparkSession建立了一個例項。此builder方法允許我們配置框架並將應用程式名稱設定為“**SparkDsc**”。我們使用“**getOrCreate()**”方法檢索現有的SparkSession例項或建立一個新的例項。

  • 之後,我們傳遞了一個字典資料集,其中包含與不同電子產品相關的資訊。我們使用此資料集生成了一個pandas DataFrame。生成的pandas DataFrame作為PySpark DataFrame的參考資料結構。

  • 我們使用“**createDataFrame()**”方法建立了一個PySpark DataFrame,最後使用“**dataframe_spark.show()**”方法列印/顯示它。

from pyspark.sql import SparkSession
import pandas as pd

spark = SparkSession.builder.appName("SparkDsc").getOrCreate()
dataset = {"Device name":["Laptop", "Mobile phone", "TV", "Radio"], "Store name":["JJ electronics", "Birla dealers", "Ajay services", "Kapoor stores"], "Device price":[45000, 30000, 50000, 15000], "Warranty":["6 months", "8 months", "1 year", "4 months"]}

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

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

輸出

The original spark data frame is: -
+-------------+--------------+------------+--------+
|  Device name|    Store name|Device price|Warranty|
+-------------+--------------+------------+--------+
|      Laptop |JJ electronics|       45000|6 months|
| Mobile phone| Birla dealers|       30000|8 months|
|           TV| Ajay services|       50000| 1 year |
|        Radio| Kapoor stores|       15000|4 months| 

現在,我們已經成功建立了一個DataFrame,讓我們快速討論從其中刪除列的不同方法。

使用drop()函式從DataFrame中刪除列

drop()函式提供了一種簡單的方法來從DataFrame中刪除不需要的資料。此函式有幾種技術,大多數技術取決於DataFrame。我們可以使用**drop()**函式從DataFrame中刪除單列和多列。

刪除單列

讓我們看看它的實現,它從DataFrame中刪除單列:

from pyspark.sql import SparkSession
import pandas as pd

spark = SparkSession.builder.appName("SparkDsc").getOrCreate()
dataset = {"Device name":["Laptop", "Mobile phone", "TV", "Radio"], "Store name":["JJ electronics", "Birla dealers", "Ajay srvices", "Kapoor stores"],
           "Device price":[45000, 30000, 50000, 15000], "Warranty":["6 months", "8 months", "1 year", "4 months"]}

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

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

#drop a single column using drop() method: -
dataframe_spark = dataframe_spark.drop("Warranty")
dataframe_spark.show()

輸出

The original spark data frame is: -
+------------+--------------+-------------+--------+
| Device name|    Store name|Device price|Warranty|
+------------+--------------+-------------+--------+
|      Laptop|JJ electronics|        45000|6 months|
|Mobile phone| Birla dealers|        30000|8 months|
|          TV|  Ajay srvices|        50000|  1 year|
|       Radio| Kapoor stores|        15000|4 months|
+------------+--------------+-------------+--------+

+------------+--------------+-------------+
| Device name|    Store name|Device price |
+------------+--------------+-------------+
|      Laptop|JJ electronics|        45000|
|Mobile phone| Birla dealers|        30000|
|          TV|  Ajay srvices|        50000|
|       Radio| Kapoor stores|        15000|
+------------+--------------+-------------+

建立PySpark DataFrame後,我們使用drop()函式從DataFrame中刪除“**warranty**”列。此列下的所有資料都將從DataFrame和處理單元中刪除。

刪除多列

我們將使用相同的函式來執行此操作。但是這次我們將使用“*”運算子來定位多列。

示例

#dropping multiple columns using drop() method: -
dataframe_spark = dataframe_spark.drop(*("Device price", "Warranty"))
dataframe_spark.show()

輸出

+-------------+--------------+
|  Device name|    Store name|
+-------------+--------------+
|       Laptop|JJ electronics|
| Mobile phone| Birla dealers|
|           TV|  Ajay srvices|
|        Radio| Kapoor stores|
+-------------+--------------+ 

在這裡,我們使用“*”運算子從DataFrame中刪除“**Device price**”和“**Warranty**”列。我們還可以將列列表作為drop()函式的引數傳遞。

示例

dataframe_spark = dataframe_spark.drop(["Store name", "Warranty"])
dataframe_spark.show()

輸出

+------------+-------------+
| Device name|Device price|
+------------+-------------+
|      Laptop|        45000|
|Mobile phone|        30000|
|          TV|        50000|
|       Radio|        15000|
+------------+-------------+

可以使用上述任何方法從DataFrame中刪除所有列。

使用列表推導和select()方法

我們可以使用select方法以及列表推導技術從DataFrame中刪除特定列。

示例

dataframe_spark = dataframe_spark.select([columns for columns in dataframe_spark if columns not in {"Device name", "store name"}])
dataframe_spark.show()

輸出

+------------+--------+
|Device price|Warranty|
+------------+--------+
|       45000|6 months|
|       30000|8 months|
|       50000| 1 year |
|       15000|4 months|
+------------+--------+ 

在這裡,“**Device name**”和“**Store name**”列使用列表推導從DataFrame中刪除。我們使用select()方法鎖定除“Device name”和“Store name”之外的所有列。

結論

在本文中,我們執行了從PySpark DataFrame中刪除單列和多列的基本操作。我們討論了不同的方法。我們使用“drop()”函式和“select()”方法刪除不同的列。

更新於:2023年5月5日

940 次瀏覽

啟動你的職業生涯

完成課程獲得認證

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