PySpark 在数据框中删除包含特定值的行
当我们处理复杂的数据集时,我们需要能够快速处理数据并提供结果的框架。这就是PySpark的作用。PySpark是一个由Apache社区开发的工具,用于实时处理数据。它是一个用于创建数据框并在本地python环境中解释结果的API。
数据框可以包含大量的信息/数据,为了保持对要解释的数据的相关性,我们进行所需的更改。在本文中,我们将操作一个PySpark数据框并删除包含特定值的行。这种有选择性地消除数据的操作非常简单但又非常重要。
准备数据集以创建PySpark数据框
在我们开始删除行之前,我们应该准备一个合适的数据集。借助这个数据集,我们将创建一个数据框。
示例
我们从“pyspark.sql”导入了一个 SparkSession 。这个sparksession作为Apache spark的入口点。这个会话管理框架的配置。
我们使用builder方法创建了一个名为 sparlOBJ 的“SparkSession”对象。给出应用程序名称不是强制性的步骤,但它有助于程序员找到特定的会话。
我们传递了一个包含6个数字序列的数据集。我们传递了一个列标签的列表。我们使用了“ SparkSession ”实例和“ createDataFrame ”方法来创建一个“PySpark”数据框。
数据集和列名的列表作为此方法的参数传递,并最后打印数据框。
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|
+----------+----------+----------+----------+
现在我们已经成功准备了一个数据框,让我们来删除包含特定值的某些行。我们将首先针对一个单独的列进行操作。
使用Filter()函数删除具有特定值的行
该函数根据传入的条件对数据进行过滤。条件驱动函数的逻辑,指定“ 要过滤的内容 ”和 不过滤的内容 。我们将使用该函数针对某一列的特定值进行操作。
示例
在下面的示例中,我们使用 filter() 函数来过滤包含值“18”的行。它只会针对“ Sequence 1 ”列下的值进行操作。
新的数据框仅包含那些“Sequence 1”不等于“18”的行。包含该值的整行已从数据框中删除。
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_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()
然而,首先需要分析数据框,然后选择相关信息。
结论
本文重点讨论了“PySpark”数据框的基础知识。我们讨论了删除包含特定数据的行的不同方法。我们使用了 filter() 函数和 where() 函数,并建立了条件来删除行。从数据框中删除数据是一个关键的步骤,应该谨慎进行。