pyspark.sql中如何对DataFrame进行数据过滤和筛选
发布时间:2023-12-18 23:41:30
在pyspark.sql中,可以使用DataFrame的filter()方法对数据进行过滤和筛选。
DataFrame的filter()方法接受一个表达式,该表达式用于指定过滤条件。表达式可以使用DataFrame中的任意列,并且可以使用多个逻辑运算符(例如,与、或、非)。
以下是使用filter()方法进行数据过滤和筛选的示例:
首先,使用pyspark.sql中的SparkSession创建一个DataFrame对象:
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
data = [("Alice", 25), ("Bob", 30), ("Charlie", 35), ("Dave", 40)]
df = spark.createDataFrame(data, ["Name", "Age"])
现在,我们有一个包含姓名和年龄的DataFrame。我们可以使用filter()方法根据条件筛选数据。例如,筛选出年龄大于30的人:
filtered_df = df.filter(df.Age > 30) filtered_df.show()
输出结果为:
+-------+---+ | Name|Age| +-------+---+ |Charlie| 35| | Dave| 40| +-------+---+
我们还可以使用多个条件组合进行过滤。例如,筛选出年龄大于30且姓名以字母'C'开头的人:
filtered_df = df.filter((df.Age > 30) & df.Name.startswith("C"))
filtered_df.show()
输出结果为:
+-------+---+ | Name|Age| +-------+---+ |Charlie| 35| +-------+---+
除了使用>、<等比较运算符之外,还可以使用其他表达式函数进行过滤。例如,我们可以使用isNull()函数筛选出年龄为空的人:
filtered_df = df.filter(df.Age.isNull()) filtered_df.show()
输出结果为:
+----+----+ |Name| Age| +----+----+ +----+----+
可以看到,没有年龄为空的人的记录。
除了filter()方法,还可以使用where()方法进行数据过滤和筛选。它们的用法基本相同,只是语义上略有不同。示例代码如下:
filtered_df = df.where(df.Age > 30) filtered_df.show()
输出结果和前面的示例相同。
综上所述,可以使用pyspark.sql中的filter()方法对DataFrame进行数据过滤和筛选。可以使用表达式指定过滤条件,可以使用多个逻辑运算符进行条件组合,还可以使用其他表达式函数进行数据过滤。
