從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()”方法刪除不同的列。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP