PySpark日期列筛选报错:start_date<今日<end_date条件不生效
解决PySpark DataFrame日期范围筛选问题
你的代码报错主要有两个核心问题:
- Python中
&的优先级高于</>,导致条件表达式被错误解析,必须给每个比较逻辑单独加括号 - 直接用Python的
datetime.date.today()和Spark列比较,可能存在类型兼容问题,更推荐用PySpark内置的日期函数适配Spark环境
修正方案1:修复运算符优先级问题
如果坚持使用Python的今日日期,需给每个比较条件单独加括号,确保逻辑运算顺序正确:
from datetime import date from pyspark.sql.functions import col today = date.today() df = df.filter( (col("start_date") < today) & (col("end_date") > today) )
修正方案2:使用PySpark内置日期函数(更推荐)
用current_date()直接获取Spark环境中的今日日期,完全适配Spark的日期列类型,避免类型转换隐患:
from pyspark.sql.functions import col, current_date df = df.filter( (col("start_date") < current_date()) & (col("end_date") > current_date()) )
额外注意:如果你的start_date或end_date是字符串类型,需要先通过to_date()转换为日期类型再进行比较:
from pyspark.sql.functions import to_date df = df.withColumn("start_date", to_date(col("start_date"), "yyyy-MM-dd")) df = df.withColumn("end_date", to_date(col("end_date"), "yyyy-MM-dd"))
内容的提问来源于stack exchange,提问作者user3258218
相关产品推荐
相关产品推荐

