📜  使用条件删除 PySpark DataFrame 中的行(1)

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

使用条件删除 PySpark DataFrame 中的行

在 PySpark 中,我们经常需要删除 DataFrame 中的行。这可以通过过滤数据来完成,过滤器将根据指定的条件删除行。

方法一:使用 where() 方法过滤数据

where() 是 PySpark DataFrame 类的一个方法,用于根据指定的条件筛选数据。

# 导入 PySpark 模块
from pyspark.sql.functions import col

# 创建示例数据
data = [("Alice", 25, "female"),
        ("Bob", 30, "male"),
        ("Charlie", 35, "male"),
        ("David", 40, "male"),
        ("Emily", 45, "female")]

# 创建一个 DataFrame
df = spark.createDataFrame(data, ["Name", "Age", "Gender"])

# 打印原始 DataFrame
df.show()

# 删除 Gender 列值为 male 的行
df = df.where(col("Gender") != "male")

# 打印更新后的 DataFrame
df.show()

注:col() 函数用于引用列名,可以使用 >>=<<===!= 运算符与列值进行比较。

输出:

+-------+---+------+
|   Name|Age|Gender|
+-------+---+------+
|  Alice| 25|female|
|    Bob| 30|  male|
|Charlie| 35|  male|
|  David| 40|  male|
|  Emily| 45|female|
+-------+---+------+

+-----+---+------+
| Name|Age|Gender|
+-----+---+------+
|Alice| 25|female|
|Emily| 45|female|
+-----+---+------+

可以看到,Gender 列值为 male 的行已被删除。

方法二:使用 filter() 方法过滤数据

filter() 方法是 PySpark DataFrame 类的另一个方法,也可以用于根据指定的条件删除行。

# 导入 PySpark 模块
from pyspark.sql.functions import col

# 创建示例数据
data = [("Alice", 25, "female"),
        ("Bob", 30, "male"),
        ("Charlie", 35, "male"),
        ("David", 40, "male"),
        ("Emily", 45, "female")]

# 创建一个 DataFrame
df = spark.createDataFrame(data, ["Name", "Age", "Gender"])

# 打印原始 DataFrame
df.show()

# 删除 Gender 列值为 male 的行
df = df.filter(col("Gender") != "male")

# 打印更新后的 DataFrame
df.show()

输出:

+-------+---+------+
|   Name|Age|Gender|
+-------+---+------+
|  Alice| 25|female|
|    Bob| 30|  male|
|Charlie| 35|  male|
|  David| 40|  male|
|  Emily| 45|female|
+-------+---+------+

+-----+---+------+
| Name|Age|Gender|
+-----+---+------+
|Alice| 25|female|
|Emily| 45|female|
+-----+---+------+

可以看到,Gender 列值为 male 的行已被删除。

以上两个方法都可以用于根据指定的条件删除 DataFrame 中的行。我们可以根据实际需求选择其中任意一个。

参考资料