从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()”方法删除不同的列。