PySpark 通过条件删除DataFrame中的行

PySpark 通过条件删除DataFrame中的行

对数据帧应用条件对程序员非常有益。我们可以验证数据以确保其符合我们的模型。我们可以通过应用条件和筛选数据帧中的无关数据来操纵数据帧,从而改善数据可视化。在本文中,我们将执行类似的操作,将条件应用于PySpark数据帧并从中删除行。Pyspark提供实时数据处理。它是Apache Spark的API,允许程序员在本地的Python环境中创建Spark框架。

示例

现在我们已经对PySpark数据帧有了基本的了解,让我们创建一个。在这里,

  • 我们从“spark.sql”中导入了一个“SparkSession”。这个会话作为使用“Spark APIs”的入口点,并允许我们根据我们自己的意愿配置数据帧。我们为一个应用程序创建一个SparkSession,然后在整个代码库中使用它。

  • 我们传递了一个包含有关菜品信息的字典数据集,包括它们的名称、价格、评级和折扣。我们使用数据集创建了一个pandas数据帧。

  • 然后将pandas数据帧作为“.createDataFrame”方法的参数传递,以创建一个Spark数据帧。

  • 最后,我们使用“show()”方法显示了数据帧。

from pyspark.sql import SparkSession
import pandas as pd

sparkOBJ = SparkSession.builder.appName("DscSpark").getOrCreate()
dataset = {"Dish name": ["Biryani", "Fish", "Mashed potatoes", "Salad"], "Price": [250, 350, 180, 200], "Rating":[9, 7, 8, 6], "discount %":[20, 30, 10, 15]}

dataframe_pd = pd.DataFrame(dataset, index=[1, 2, 3, 4])

dataframe_spk = sparkOBJ.createDataFrame(dataframe_pd)
print("The original data frame is: -")
dataframe_spk.show()

输出

The original data frame is: -
+---------------+-----+------+----------+
|      Dish name|Price|Rating|discount %|
+---------------+-----+------+----------+
|        Biryani|  250|     9|        20|
|           Fish|  350|     7|        30|
|Mashed potatoes|  180|     8|        10|
|          Salad|  200|     6|        15|
+---------------+-----+------+----------+

既然我们已经创建了一个spark数据帧,我们将对其列应用条件来删除其中的行。

对单个列应用条件

我们将从一个简单的任务开始,针对一个单列进行操作。让我们在这里编写代码,

  • 在创建数据帧之后,我们使用了”filter()”函数来删除那些”Rating”列的值大于8的行。

  • 第3行和第4行被保留了下来。

  • 我们创建了一个新的数据帧来保存对原始数据帧所做的更改。

示例

from pyspark.sql import SparkSession
import pandas as pd

sparkOBJ = SparkSession.builder.appName("DscSpark").getOrCreate()
dataset = {"Dish name": ["Biryani", "Fish", "Mashed potatoes", "Salad"], "Price": [250, 350, 180, 200],
           "Rating":[9, 7, 8, 6], "discount %":[20, 30, 10, 15]}

dataframe_pd = pd.DataFrame(dataset)

dataframe_spk = sparkOBJ.createDataFrame(dataframe_pd)
print("The original data frame is: -")
dataframe_spk.show()

dataframe_fil = dataframe_spk.filter(dataframe_spk.Rating < 8)
dataframe_fil.show()

输出

The original data frame is: -
+---------------+-----+------+----------+
|      Dish name|Price|Rating|discount %|
+---------------+-----+------+----------+
|        Biryani|  250|     9|        20|
|           Fish|  350|     7|        30|
|Mashed potatoes|  180|     8|        10|
|          Salad|  200|     6|        15|
+---------------+-----+------+----------+

+--------+-----+------+----------+
|Dishname|Price|Rating|discount %|
+--------+-----+------+----------+
|    Fish|  350|     7|        30|
|   Salad|  200|     6|        15|
+--------+-----+------+----------+

在多个列上应用条件

为了增加数据帧的特异性和简化数据分析,我们可以在数据帧的多个列上应用特定条件。这种方法通过从数据帧中删除不必要的行来提高数据处理的效率。

我们将使用“&”运算符来选择多个列,因为在Spark数据帧的情况下,表达式在所有行上进行逐元素评估。因此,我们需要一个“逐元素逻辑运算符”。

示例

让我们看一下代码以更好地理解。

  • 在创建数据帧后,我们使用filter()函数来删除“Rating”列值小于7且“Price”列大于300的行。

  • 满足条件的列对应的行将被保留,即“Row 1”和“Row 3”。

from pyspark.sql import SparkSession
import pandas as pd

sparkOBJ = SparkSession.builder.appName("DscSpark").getOrCreate()
dataset = {"Dish name": ["Biryani", "Fish", "Mashed potatoes", "Salad"], "Price": [250, 350, 180, 200], "Rating":[9, 7, 8, 6], "discount%":[20, 30, 10, 15]}

dataframe_pd = pd.DataFrame(dataset)

dataframe_spk = sparkOBJ.createDataFrame(dataframe_pd)
print("The original data frame is: -")
dataframe_spk.show()
dataframe_fil = dataframe_spk.filter((dataframe_spk.Rating > 7) & (dataframe_spk.Price < 300))
dataframe_fil.show()

输出

The original data frame is: -
+---------------+-----+------+---------+
|      Dish name|Price|Rating|discount%|
+---------------+-----+------+---------+
|        Biryani|  250|     9|       20|
|           Fish|  350|     7|       30|
|Mashed potatoes|  180|     8|       10|
|          Salad|  200|     6|       15|
+---------------+-----+------+---------+

+--------+-----+------+---------+------+
|      Dish name|Price|Rating|discount%|
+--------+-----+------+---------+------+
|        Biryani|  250|     9|       20|
|Mashed potatoes|  180|     8|       10|
+--------+-----+------+---------+------+

结论

在本文中,我们讨论了不同的方法来根据列的条件从一个PySpark数据框中删除行。我们创建了一个数据框,然后针对单个列进行了操作。然后我们对多个列应用了条件并删除了行。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程