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 表达式或条件过滤列/行的函数。
Syntax: Dataframe.filter(Condition)
Where condition may be given Logcal expression/ sql expression
示例 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 引用数据框的列名。
Syntax: Dataframe_obj.col(column_name).
Where, Column_name is refers to the column name of dataframe.
示例 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 的布尔表达式
Syntax: isin(*list)
Where *list is extracted from of list.
示例 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。
Syntax: startswith(character)
例子:
蟒蛇3
dataframe.filter(dataframe.student_NAME.startswith('s')).show()
输出:
的endsWith()这个函数接受一个字符作为列字符串,其字符串的字符结尾,如果条件满足,则返回True参数和搜索。
Syntax: endswith(character)
例子:
蟒蛇3
dataframe.filter(dataframe.student_NAME.endswith('t')).show()
输出:
这里将使用这两个函数来过滤数据框:
蟒蛇3
dataframe.filter((dataframe.student_NAME.endswith('t')) &
(dataframe.student_NAME.startswith("A"))).show()
输出: