PySpark 从DataFrame中删除一个或多个列
PySpark数据帧是由Apache Spark开发人员开发的一种强大的实时数据处理框架。Spark最初是用Scala编程语言编写的,为了增加其影响力和灵活性,构建了几个API。这些API提供了一个可以在本地环境上运行Spark应用程序的接口。
其中一个API被称为PySpark,是为python环境开发的。PySpark数据帧也由行和列组成,但其处理方式不同,它使用实时内存(RAM)计算技术来处理数据。
在本文中,我们将执行和理解从PySpark数据帧中删除单个和多个列的基本操作。首先,我们将创建一个参考数据帧。
创建一个PySpark数据帧
我们需要创建一个 SparkSession ,用来处理数据帧的配置部分。SparkSession作为访问spark API的入口点。我们创建一个SparkSession对象,它处理群集管理器和框架的功能。
我们可以使用这个对象读取数据集并准备数据帧。通常,我们需要一个“ 模式 ”来生成数据帧,但仅靠数据集本身就可以构建PySpark数据帧的结构。让我们创建一个数据帧来加深我们的理解。
示例
- 我们导入了pandas库,并使用pyspark库导入了 SparkSession 。
-
我们使用”builder”方法为SparkSession创建了一个实例。这个builder方法允许我们配置框架,并将应用程序名称设置为”SparkDsc”。我们使用”getOrCreate()”方法检索当前存在的SparkSession实例,如果没有则创建一个新的实例。
-
然后,我们传递了一个包含有关不同电子设备信息的字典数据集。我们使用这个数据集生成了一个pandas数据帧。生成的pandas数据帧作为PySpark数据帧的参考数据结构。
-
我们使用”createDataFrame()”方法创建了一个PySpark数据帧,并最后使用”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|
现在我们已经成功创建了一个数据框,让我们快速讨论一下从中删除列的不同方法。
使用drop()函数从数据框中删除列
drop()函数提供了一种简单的方法来删除数据框中不需要的数据。这个函数有几种与之相关的技巧,大部分取决于数据框。我们可以使用 drop() 函数从数据框中删除单个或多个列。
删除单个列
让我们来看一下它的实现,从一个数据框中删除一个单个列:
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数据框后,我们使用drop()函数从数据框中删除了“ warranty ”列。该列下的所有数据将从数据框和处理单元中删除。
删除多列
我们将使用相同的函数执行此操作。但这次我们将使用“*”运算符来指定多个列。
示例
#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|
+-------------+--------------+
这里,我们使用“*”运算符从数据框中删除了“ 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|
+------------+-------------+
可以使用上述讨论的任何方法来从数据框中删除所有列。
使用列表推导和Select()方法
我们可以使用select方法和列表推导技术来从数据框中删除特定的列。
示例
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|
+------------+--------+
在这里,通过列表推导式从数据框中删除“设备名称”和“商店名称”列。我们使用select()方法锁定除“设备名称”和“商店名称”之外的所有列。
结论
在本文中,我们执行了从PySpark数据帧中删除单个和多个列的基本操作。我们讨论了不同的可能方法。我们使用“drop()”函数和“select()”方法来删除不同的列。