📜  Pyspark – 基于多种条件过滤数据框

📅  最后修改于: 2022-05-13 01:54:28.839000             🧑  作者: Mango

Pyspark – 基于多种条件过滤数据框

在本文中,我们将看到如何根据多个条件过滤数据框。

让我们创建一个 Dataframe 进行演示:

Python3
# importing module
import pyspark
  
# importing sparksession from pyspark.sql module
from pyspark.sql import SparkSession
  
# creating sparksession and giving an app name
spark = SparkSession.builder.appName('sparkdf').getOrCreate()
  
# list  of students  data
data = [["1", "Amit", "DU"],
        ["2", "Mohit", "DU"],
        ["3", "rohith", "BHU"],
        ["4", "sridevi", "LPU"],
        ["1", "sravan", "KLMP"],
        ["5", "gnanesh", "IIT"]]
  
# specify column names
columns = ['student_ID', 'student_NAME', 'college']
  
# creating a dataframe from the lists of data
dataframe = spark.createDataFrame(data, columns)
  
# show dataframe
dataframe.show()


Python3
dataframe.filter(dataframe.college == "DU").show()


Python3
dataframe.filter((dataframe.college == "DU") &
                 (dataframe.student_ID == "1")).show()


Python3
# Using SQL col() function
from pyspark.sql.functions import col
dataframe.filter(col("college") == "DU").show()


Python3
# Using SQL col() function
from pyspark.sql.functions import col
  
  
dataframe.filter((col("college") == "DU") &
                 (col("student_NAME") == "Amit")).show()


Python3
list = [1, 2]
dataframe.filter(dataframe.student_ID.isin(list)).show()


Python3
Id_list = [1, 2]
college_list = ['DU','IIT']
dataframe.filter((dataframe.student_ID.isin(Id_list)) |
                 (dataframe.college.isin(college_list))).show()


Python3
dataframe.filter(dataframe.student_NAME.startswith('s')).show()


Python3
dataframe.filter(dataframe.student_NAME.endswith('t')).show()


Python3
dataframe.filter((dataframe.student_NAME.endswith('t')) &
                 (dataframe.student_NAME.startswith("A"))).show()


输出:



方法一:使用Filter()

filter():它是一个基于 SQL 表达式或条件过滤列/行的函数。

示例 1:过滤单个条件

蟒蛇3

dataframe.filter(dataframe.college == "DU").show()

输出:

示例 2:过滤具有多个条件的列。



蟒蛇3

dataframe.filter((dataframe.college == "DU") &
                 (dataframe.student_ID == "1")).show()

输出:

方法二:使用过滤器和SQL Col

这里我们将使用 SQL col函数,该函数使用 dataframe_object.col 引用数据框的列名。

示例 1:筛选具有单个条件的列。

蟒蛇3

# Using SQL col() function
from pyspark.sql.functions import col
dataframe.filter(col("college") == "DU").show()

输出:



示例 2:过滤具有多个条件的列。

蟒蛇3

# Using SQL col() function
from pyspark.sql.functions import col
  
  
dataframe.filter((col("college") == "DU") &
                 (col("student_NAME") == "Amit")).show()

输出:

方法 3:使用 isin()

isin():此函数将列表作为参数并返回布尔表达式。如果此表达式的值包含在参数的计算值中,则计算为 true 的布尔表达式

示例 1:使用单个列表进行过滤。

蟒蛇3

list = [1, 2]
dataframe.filter(dataframe.student_ID.isin(list)).show()

输出:



示例 2:过滤多个列表。

蟒蛇3

Id_list = [1, 2]
college_list = ['DU','IIT']
dataframe.filter((dataframe.student_ID.isin(Id_list)) |
                 (dataframe.college.isin(college_list))).show()

输出:

方法 4:使用 Startswith 和 Endswith

这里我们将使用pyspark的startswith和endswith函数。

startswith():该函数以一个字符作为参数,在列字符串搜索以第一个字符开头的字符串,如果条件满足则返回True。

例子:

蟒蛇3



dataframe.filter(dataframe.student_NAME.startswith('s')).show()

输出:

的endsWith()这个函数接受一个字符作为列字符串,其字符串的字符结尾,如果条件满足,则返回True参数和搜索。

例子:

蟒蛇3

dataframe.filter(dataframe.student_NAME.endswith('t')).show()

输出:

这里将使用这两个函数来过滤数据框:

蟒蛇3

dataframe.filter((dataframe.student_NAME.endswith('t')) &
                 (dataframe.student_NAME.startswith("A"))).show()

输出: