📜  PySpark 中具有多个条件的子集或过滤数据(1)

📅  最后修改于: 2023-12-03 14:45:52.698000             🧑  作者: Mango

PySpark 中具有多个条件的子集或过滤数据

在 PySpark 中,你可以使用多个条件来过滤数据集,以便筛选出符合特定条件的子集。这对于数据处理和分析非常有用。下面是一些使用 PySpark 进行多个条件子集过滤的方法。

使用 filter 方法

可以使用 DataFrame 的 filter 方法来筛选具有多个条件的数据子集。

# 导入必要的库
from pyspark.sql import SparkSession
from pyspark.sql.functions import col

# 创建 SparkSession
spark = SparkSession.builder.getOrCreate()

# 创建示例数据集
data = [("Alice", 25, "female"),
        ("Bob", 30, "male"),
        ("Charlie", 35, "male"),
        ("Diana", 40, "female")]

# 将示例数据集转换为 DataFrame
df = spark.createDataFrame(data, ["name", "age", "gender"])

# 使用多个条件过滤数据集,并返回筛选后的子集
filtered_df = df.filter((col("age") > 30) & (col("gender") == "male"))

# 显示结果
filtered_df.show()

输出结果:

+-------+---+------+
|   name|age|gender|
+-------+---+------+
|Charlie| 35|  male|
+-------+---+------+
使用 SQL 查询语句

还可以使用 SQL 查询语句来过滤数据集,这样更加灵活。

# 创建临时视图
df.createOrReplaceTempView("people")

# 使用 SQL 查询语句进行条件过滤
filtered_df = spark.sql("SELECT * FROM people WHERE age > 30 AND gender = 'male'")

# 显示结果
filtered_df.show()

输出结果:

+-------+---+------+
|   name|age|gender|
+-------+---+------+
|Charlie| 35|  male|
+-------+---+------+
使用 where 方法

另一种过滤数据集的常用方法是使用 DataFrame 的 where 方法。

# 使用多个条件过滤数据集,并返回筛选后的子集
filtered_df = df.where((col("age") > 30) & (col("gender") == "male"))

# 显示结果
filtered_df.show()

输出结果:

+-------+---+------+
|   name|age|gender|
+-------+---+------+
|Charlie| 35|  male|
+-------+---+------+

上述方法中的 col 函数用于引用 DataFrame 中的列,可以使用其他函数和操作符来构建更复杂的条件。

总结:PySpark 中可以使用多种方法来实现多个条件的子集过滤,包括使用 filter 方法、SQL 查询语句和 where 方法。选择合适的方法取决于你对 Spark 的熟悉程度和个人偏好。以上提供的示例能够帮助你筛选出符合特定条件的数据子集。