从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 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告