在 PySpark DataFrame 中删除包含特定值的行


当我们处理复杂数据集时,我们需要能够快速处理数据并提供结果的框架。这就是 PySpark 出现的原因。PySpark 是 Apache 社区开发的一个工具,用于实时处理数据。它是一个 API,用于创建 DataFrame 并解释我们本地 Python 环境中的结果。

DataFrame 可以包含大量信息/数据,为了保持要解释的数据的相关性,我们进行必要的更改。在本文中,我们将操作 PySpark DataFrame 并删除包含特定值的行。这种选择性删除数据的操作非常简单,并且可以证明具有极其重要的意义。

准备数据集以创建 PySpark DataFrame

在开始删除行之前,我们应该准备一个适当的数据集。借助此数据集,我们将创建一个 DataFrame。

示例

我们从“pyspark.sql”中导入了SparkSession。此 SparkSession 充当 Apache Spark 的入口点。此会话管理框架的配置。

我们使用构建器方法创建了一个名为“sparlOBJ”的“SparkSession”对象。提供应用程序名称不是强制步骤,但它可以帮助程序员找到特定的会话。

我们传递了一个包含 6 个数字序列的数据集。我们传递了一个列标签列表。我们使用了“SparkSession”实例和“createDataFrame”方法来创建一个“PySpark”DataFrame。

数据集和列名列表作为此方法的参数传递,最后我们打印了 DataFrame。

from pyspark.sql import SparkSession

sparkOBJ = SparkSession.builder.appName("SPARK_DSC").getOrCreate()

dataset = [("23", "25", "18", "19"), ("18", "25", "28", "40"),
           ("15", "18", "45", "11"), ("12", "8", "18", "28"),
           ("25", "42", "18", "29"), ("45", "50", "17", "11")]
columnsLis = ["Sequence 1", "Sequence 2", "Sequence 3", "Sequence 4"]

dataframe_SPK = sparkOBJ.createDataFrame(dataset, columnsLis)
print("the original data frame is: -")
dataframe_SPK.show()

输出

the original data frame is: -
+----------+----------+----------+----------+
|Sequence 1|Sequence 2|Sequence 3|Sequence 4|
+----------+----------+----------+----------+
|        23|        25|        18|        19|
|        18|        25|        28|        40|
|        15|        18|        45|        11|
|        12|         8|        18|        28|
|        25|        42|        18|        29|
|        45|        50|        17|        11|
+----------+----------+----------+----------+

现在我们已经成功准备了一个 DataFrame,让我们删除包含特定值的某些行。我们将首先针对单个列。

使用 filter() 函数删除具有值的行

此函数根据传递的条件过滤数据。条件驱动函数的逻辑并指定“要过滤的内容”和“不要过滤的内容”。我们将使用此函数来定位列下的特定值。

示例

在下面的示例中,我们使用了filter()函数来过滤包含值“18”的行。它将只针对“Sequence 1”列下的值。

新的 DataFrame 仅包含“Sequence 1”不等于“18”的行。包含此值的整行已从 DataFrame 中删除。

from pyspark.sql import SparkSession
sparkOBJ = SparkSession.builder.appName("SPARK_DSC").getOrCreate()
dataset = [("23", "25", "18", "19"), ("18", "25", "28", "40"),
           ("15", "18", "45", "11"), ("12", "8", "18", "28"),
           ("25", "42", "18", "29"), ("45", "50", "17", "11")]
columnsLis = ["Sequence 1", "Sequence 2", "Sequence 3", "Sequence 4"]

dataframe_SPK = sparkOBJ.createDataFrame(dataset, columnsLis)
print("the original data frame is: -")
dataframe_SPK.show()
dataframe_SPK.filter(dataframe_SPK["Sequence 1"] != "18").show()

输出

the original data frame is: -
+----------+----------+----------+----------+
|Sequence 1|Sequence 2|Sequence 3|Sequence 4|
+----------+----------+----------+----------+
|        23|        25|        18|        19|
|        18|        25|        28|        40|
|        15|        18|        45|        11|
|        12|         8|        18|        28|
|        25|        42|        18|        29|
|        45|        50|        17|        11|
+----------+----------+----------+----------+

+----------+----------+----------+----------+
|Sequence 1|Sequence 2|Sequence 3|Sequence 4|
+----------+----------+----------+----------+
|        23|        25|        18|        19|
|        15|        18|        45|        11|
|        12|         8|        18|        28|
|        25|        42|        18|        29|
|        45|        50|        17|        11|
+----------+----------+----------+----------+

使用 where() 函数删除行

我们可以借助“where()”函数执行类似的操作。此函数也围绕特定条件工作。如果条件为“true”,我们将生成一个新的 DataFrame。让我们看看它的实现。

示例

dataframe_SPK.where(dataframe_SPK["Sequence 1"] != "18").show()

输出

+----------+----------+----------+----------+
|Sequence 1|Sequence 2|Sequence 3|Sequence 4|
+----------+----------+----------+----------+
|        23|        25|        18|        19|
|        15|        18|        45|        11|
|        12|         8|        18|        28|
|        25|        42|        18|        29|
|        45|        50|        17|        11|
+----------+----------+----------+----------+

在这里,“where()”函数的行为与“filter()”函数完全相同。即使语法也相同。这两种方法可以轻松地编织条件并根据它删除行。这些函数也可以应用于多个列,并且可以过滤更多数据。

示例

dataframe_SPK.filter((dataframe_SPK["Sequence 1"] != "18") & 
(dataframe_SPK["Sequence 2"] != "18")
                    & (dataframe_SPK["Sequence 3"] != "18") & 
(dataframe_SPK["Sequence 4"] != "18")).show()

但是,首先分析 DataFrame 然后选择相关信息非常重要。

结论

本文重点介绍“PySpark”DataFrame 的基础知识。我们讨论了删除包含特定数据的行的不同方法。我们使用了filter()函数和where()函数并建立了删除行的条件。从 DataFrame 中删除数据是一个关键步骤,应该谨慎进行。

更新于: 2023年5月5日

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.