📌  相关文章
📜  根据多个条件删除 PySpark 数据框中的行(1)

📅  最后修改于: 2023-12-03 15:10:49.154000             🧑  作者: Mango

根据多个条件删除 PySpark 数据框中的行

有时候我们需要删除 PySpark 数据框中满足特定条件的一些行。如果我们只需要删除一条记录,可以通过 filter 方法实现。但是如果我们需要同时满足多个条件,删除大量记录,怎么办呢?本文将介绍如何根据多个条件删除 PySpark 数据框中的行。

1. 创建一个样本数据集

首先,我们需要创建一个 PySpark 数据框,用于演示如何删除行。以下代码将创建一个包含高中和大学成绩的样本数据集:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col

# Create a SparkSession
spark = SparkSession.builder.appName("DeleteRowsDemo").getOrCreate()

# Create a sample dataset
data = [
  ("John", "Smith", 80, 90),
  ("Mary", "Johnson", 95, 85),
  ("Bob", "Williams", 75, 60),
  ("Linda", "Davis", 60, 70),
  ("Tom", "Wilson", 80, 75),
  ("Susan", "Smith", 88, 75)
]

df = spark.createDataFrame(data, ["FirstName", "LastName", "HighSchoolScore", "CollegeScore"])
df.show()

该数据集包含学生的名字、姓氏、高中成绩和大学成绩。下面是该数据集的输出结果:

+---------+--------+--------------+------------+
|FirstName|LastName|HighSchoolScore|CollegeScore|
+---------+--------+--------------+------------+
|     John|   Smith|            80|          90|
|     Mary| Johnson|            95|          85|
|      Bob|Williams|            75|          60|
|    Linda|   Davis|            60|          70|
|      Tom|  Wilson|            80|          75|
|    Susan|   Smith|            88|          75|
+---------+--------+--------------+------------+
2. 使用 where 方法删除行

我们可以使用 PySpark 数据框的 where 方法来删除行。该方法接受一个表达式,该表达式用于筛选要删除的行。以下代码将删除姓氏为“Smith”并且高中成绩小于等于80分的行:

# Delete rows based on multiple conditions using "where"
df = df.where(~((col("LastName") == "Smith") & (col("HighSchoolScore") <= 80)))
df.show()

在上面的代码中,~ 符号表示否定。这意味着我们将保留表达式中的所有行,而不是删除它们。

下面是执行上述代码后,剩余的数据行:

+---------+--------+--------------+------------+
|FirstName|LastName|HighSchoolScore|CollegeScore|
+---------+--------+--------------+------------+
|     Mary| Johnson|            95|          85|
|      Bob|Williams|            75|          60|
|    Linda|   Davis|            60|          70|
|      Tom|  Wilson|            80|          75|
+---------+--------+--------------+------------+
3. 使用 filter 方法删除行

我们也可以使用 PySpark 数据框的 filter 方法来删除行。该方法的参数是一个表达式,该表达式用于筛选要删除的行。以下代码将删除大学成绩小于等于70分并且姓氏为“Smith”的行:

# Delete rows based on multiple conditions using "filter"
df = df.filter(~((col("LastName") == "Smith") & (col("CollegeScore") <= 70)))
df.show()

在上面的代码中,我们使用了 ~ 符号来否定表达式中的所有行。

下面是执行上述代码后,剩余的数据行:

+---------+--------+--------------+------------+
|FirstName|LastName|HighSchoolScore|CollegeScore|
+---------+--------+--------------+------------+
|     Mary| Johnson|            95|          85|
|      Bob|Williams|            75|          60|
|    Linda|   Davis|            60|          70|
|      Tom|  Wilson|            80|          75|
+---------+--------+--------------+------------+
4. 总结

在本文中,我们介绍了两种方法来根据多个条件删除 PySpark 数据框中的行。我们使用了 PySpark 数据框的 wherefilter 方法来实现这种操作。这些方法使得处理大量数据变得更加容易和高效。希望这篇文章能够帮助你更好地理解如何在 PySpark 中删除行。

5. 引用

pyspark.sql.DataFrame.where

pyspark.sql.DataFrame.filter