在 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 中删除数据是一个关键步骤,应该谨慎进行。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP